c++ - 使用作为 lambda 传递的自定义比较器创建集
问题描述
我正在为此编写解决方案,需要创建一个set
,实际上是unordered_map
从 int 到我的 custom set
,不用多说,这就是我想出的:
auto comparator = [](pair<int, int> a, pair<int, int> b) {return a.second == b.second ? a.first < b.first : a.second < b.second; };
unordered_map<int, set < pair<int, int>,decltype(comparator) >> H;
其余代码不相关。在这里,编译器抱怨说
"Severity Code Description Project File Line Suppression State
<lambda_6dd753bdcbaf959c162af7914f0815bf>(void)': attempting to reference a deleted function"
任何人都可以描述这是编译器试图告诉我的,或者如果你能暗示我做错了什么,那就更好了。提前致谢。
解决方案
它告诉你它需要为你定义的那个 lambda 类型调用默认的 c'tor。但是,只有在 C++20 及以上版本中,无捕获 lambda 才是默认可构造的。在此之前,不能默认构造所有lambda,它们只能从相应的 lambda 表达式(当然也可以复制)中出现。
我建议为此使用自定义函子类型。
struct Comparator {
bool operator()(pair<int, int> a, pair<int, int> b)
{ return a.second == b.second ? a.first < b.first : a.second < b.second; };
};
unordered_map<int, set < pair<int, int>, Comparator >> H;
推荐阅读
- c++ - 有没有办法在 VSCode Mac 中链接 SFML 库?
- keras - 使用不同的损失函数恢复训练
- bash - bash命令通过索引更改终端中的选项卡
- java - SpringBoot REST Controller 抛出“不能有实体参数错误”
- javascript - 如何防止 JS 变形我的 div-Container?
- google-apps-script - 尝试比较两行,然后使用谷歌脚本在每行中添加单元格
- xamarin - 当我的 POST 请求有很多项目时,我收到错误“StatusCode: 502, ReasonPhrase: 'Bad Gateway'”
- single-sign-on - 无法通过 Tab 选择 Google SSO
- c# - 如何将 C# 语法翻译成 Matlab?
- ssl - 如何在 nginx 上的两个不同服务器配置之间传递 SSL 握手失败信息