簡體   English   中英

使用帶有lambda比較器錯誤的映射的C ++ priority_queue

[英]C++ priority_queue using map with lambda comparator error

我正在嘗試為std :: proirity_queue實現我自己的關鍵比較器,如下所示:

funtion insertInPQ(vector<int> nums){
   map<int,int> m;
   for(int i=0;i<nums.size();i++)
     m[nums[i]]++;

   auto comp = []( int a, int b ) 
   { 
        return m[a] < m[b]; 
   };
   priority_queue<int, vector<int>, decltype(comp)> pq(comp);
   for(auto it=m.begin();it!=m.end();it++)
        pq.push(it->first);
}

但它的給出錯誤:

在lambda函數中:第10行:第23行:錯誤:將'const std :: map'作為'this'參數傳遞,丟棄限定符[-fpermissive] return m [a] <m [b];

你是lamdba錯了,你需要比較兩個參數或捕獲m變量。

auto comp = []( int a, int b ) 
{ 
     return a < b; 
};

要么:

auto comp = [m]( int a, int b ) 
{ 
     return m[a] < m[b]; 
};

這取決於你想要做什么。

首先,你的lambda捕獲列表(方括號)是空的,我想應該有

[&m]

那里 ?

接下來,如果你搜索std :: map的operator [],你會發現它只能在非const映射上運行( https://en.cppreference.com/w/cpp/container/map/operator_at ) 。 您的lambda很可能是用const映射調用的。 所以嘗試使用

return m.at(a) < m.at(b);

我認為m是不是你的λ的范圍內已知的。 您必須將其作為捕獲傳遞:

   auto comp = [m]( int a, int b ) 
   { 
        return m[a] < m[b]; 
   };

暫無
暫無

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

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