const std::unordered_map<char, int>' 因为 'this' 参数会丢弃 lambda 中的限定符
const std::unordered_map<char, int>’ as ‘this’ argument discards qualifiers in lambda
我现在根据字符的频率按降序对字符串进行排序。例如:输入是"苹果",我必须输出"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;}
它有效。
谁能告诉我为什么我不能按价值捕获?
默认情况下
,lambda 的operator (...)
const
。按值捕获将要求 lambda 保留所有捕获对象的副本。
使 lambda mutable
以允许修改值捕获。
sort(s.begin(),s.end(), [=](char a, char b) mutable
{return map[a] > map[b] || map[a]==map[b]&&a<b;}
);
我怀疑sort
和unordered_map
来自命名空间std
.从您在没有命名空间解析的情况下使用它们的方式来看,您的代码中可能存在using namespace std
(这并不好(。我会厌倦使用 map
作为变量名称。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何将lambda作为模板类的成员函数参数
- 使用自动推导的 lambda 参数作为常量表达式
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 将__device__ lambda 作为参数传递给 __global__ 函数
- 将 lambda 函数作为参数传递C++
- 如何将 lambda 函数作为参数发送到另一个函数
- Lambda可以用作非类型模板参数吗
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 如何确定捕获不可复制参数的 lambda 的类型?
- 省略C++可变参数 lambda 中的"auto"关键字?
- 如何访问可变参数 lambda 函数参数
- 可变参数 lambda 捕获的解决方法
- 传递给多个参数 lambda 表达式的参数
- 如何编写丢弃其参数的通用可变参数 lambda
- 使用c++参数lambda函数
- 将函数模板"pass"为泛型可变参数 lambda 返回语句是好方法吗?
- c++模板非类型参数lambda函数