我現在正在按照字符的頻率降序排序字符串。例如:輸入是「蘋果」,我必須輸出「ppale」。因爲字符'p'出現兩次而其他字符只出現一次。所以'p'必須放在最左邊。const std :: unordered_map <char, int>'as'this'參數丟棄lambda中的限定符
這裏是我的代碼:
string frequencySort(string s) {
if(s.size() == 0) return "";
unordered_map<char,int> map;
for(auto c : s)
map[c]++; //record the frequency of each characters
sort(s.begin(),s.end(),
[=](char a, char b){return map[a] > map[b] || map[a]==map[b]&&a<b;}
);
return s;
}
但是編譯器顯示錯誤: passing ‘const std::unordered_map<char, int>’ as ‘this’ argument discards qualifiers
上[=](char a, char b){return map[a] > map[b] || map[a]==map[b]&&a<b;}
。
但是,如果我通過引用捕捉局部變量,即
[&](char a, char b){return map[a] > map[b] || map[a]==map[b]&&a<b;}
它的工作原理。
任何人都可以告訴我爲什麼我不能通過價值捕獲?
Nit挑選這裏:顯然,你*可能*有一個'使用命名空間std'在你的代碼中的某個地方。我會厭倦使用'map'作爲變量名 – WhiZTiM