[英]Create set with custom comparator passed as lambda
我正在為此編寫解決方案,需要創建一個set
,實際上是一個從 int 到我的自定義set
的unordered_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.