gpt4 book ai didi

c++ - const std::unordered_map' as ‘this’ 参数丢弃 lambda 中的限定符

转载 作者:行者123 更新时间:2023-11-30 03:31:41 25 4
gpt4 key购买 nike

我现在根据字符的出现频率对字符串进行降序排序。例如:输入是“apple”,我必须输出“ppale”。因为字符 'p' 出现了两次,而其他字符只出现了一次。所以 'p' 必须放在最左边。

这是我的代码:

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;}

有效。

谁能告诉我为什么我不能按值(value)捕获?

最佳答案

lambda 的 operator (...) 默认为 const。按值捕获将要求 lambda 保留所有捕获对象的拷贝。

使 lambda 可变 以允许修改值捕获。

sort(s.begin(),s.end(), [=](char a, char b) mutable 
{return map[a] > map[b] || map[a]==map[b]&&a<b;}
);

我怀疑 sortunordered_map 来自命名空间 std。从您在没有命名空间解析的情况下使用它们的方式来看,您可能在您的代码中有一个using namespace std(isn't nice)。我会厌倦使用 map 作为变量名。

关于c++ - const std::unordered_map<char, int>' as ‘this’ 参数丢弃 lambda 中的限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44019404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com