首页 > 解决方案 > 使用作为 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"

任何人都可以描述这是编译器试图告诉我的,或者如果你能暗示我做错了什么,那就更好了。提前致谢。

标签: c++lambdasetpredicate

解决方案


它告诉你它需要为你定义的那个 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;

推荐阅读