使用作为 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;
我正在为 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;