【发布时间】:2020-05-06 01:55:31
【问题描述】:
...
unordered_map<string ,int> map;
for (const auto& str : words) {
map[str]++;
}
auto cmp = [map](string s1, string s2){
if (map[s1] == map[s2])
return s1 < s2;
return map[s1] > map[s2];
};
...
这个给我no viable overloaded operator[] for type 'const unordered_map<std::__cxx11::string, int>' (aka 'const unordered_map<basic_string<char>, int>')
但如果我不使用 [] 运算符而是使用 .at() 进行访问。代码编译。
我不知道为什么。我检查了 [] 运算符和 .at() :两者都具有相同的方法签名。
【问题讨论】:
-
进行 4 次查找而不是 2 次查找并不是一个好主意,它在无序地图上非常有效,但仍然如此。您可能希望将这些字符串作为 const 引用传递,而不是在每次比较时复制它们。
标签: c++ c++11 lambda function-call-operator