我定义了一个映射来计算字符串的数量,同时按长度对字符串进行排序:
struct cmp {
bool operator()(const string& a, const string& b) {
return a.size() > b.size();
}
};
int main() {
map<string, int, cmp> mp;
mp["aaa"] = 1;
mp["bbb"] = 2;
cout << mp["aaa"];
}
我很困惑,因为输出是 2。我应该如何实现我的目标?
最佳答案
由于比较器的定义方式,字符串“aaa”和“bbb”被认为是相等的。您的 map 只有一项,而不是两项。首先,您为该项目分配了 1
,然后分配了 2
。
要解决这个问题,请按如下方式定义比较器:
struct cmp {
bool operator()(const string& a, const string& b) {
return a.size() == b.size() ? a > b : a.size() > b.size();
}
};
这样,只有当字符串实际上相等时才会被认为是相等的,不仅是当它们的大小匹配时,而且字符串长度仍将优先排序。
关于C++ 映射自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165441/