C++ 映射自定义比较器

标签 c++ dictionary

我定义了一个映射来计算字符串的数量,同时按长度对字符串进行排序:

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/

相关文章:

c++ - Getline 没有得到输入

c++ - 在C++类中声明参数构造函数时出错

c++ - 将内存分配给一个指针,将另一个指针指向同一个指针并删除第二个

ios - 我们可以使用 google api 绘制路线(没有多段线)吗?

Python 输入 : Retrieve required keys from TypedDict definition

C++/fstream : cannot create a new file

c++ - 使用 map 容器的字母频率

javascript - ng-options 从字典传递值

由 C++ Python 3 绑定(bind)