使用作为 lambda 传递的自定义比较器创建集合

Create set with custom comparator passed as lambda

我正在为 this 编写解决方案,需要创建一个 set,实际上是一个 unordered_map 从 int 到我的自定义 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 才是可默认构造的。在此之前 all lambdas 不能默认构造,它们只能 spring 从相应的 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;