簡體   English   中英

使用作為 lambda 傳遞的自定義比較器創建集

[英]Create set with custom comparator passed as lambda

我正在為此編寫解決方案,需要創建一個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;

代碼的 rest 不相關。 在這里,編譯器抱怨說

"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 表達式(或當然是復制)中存在 spring 。

我建議為此使用自定義函子類型。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM