【问题标题】:Create set with custom comparator passed as lambda使用作为 lambda 传递的自定义比较器创建集
【发布时间】:2020-04-19 14:10:10
【问题描述】:

我正在为this 编写解决方案,需要创建一个set,实际上是一个从int 到我的自定义setunordered_map,不用多说,这就是我想出的:

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++ lambda set predicate


【解决方案1】:

它告诉你它需要为你定义的那个 lambda 类型调用默认的 c'tor。然而,只有在 C++20 及更高版本中,无捕获 lambda 才是默认可构造的。在此之前,所有 lambdas 不能被默认构造,它们只能从相应的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2020-03-08
    • 2018-04-28
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多