You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过自定义Compare谓词对std::multimap按键升序、值降序排序?

实现std::multimap的自定义排序规则

完全可以通过自定义Compare谓词实现你要的排序逻辑:按键升序排列,键相同时按值降序排列。std::multimap的第三个模板参数就是用于指定排序规则的比较器,默认是std::less<Key>,我们只需要替换成自定义的逻辑即可。

实现方式1:自定义结构体作为比较器

定义一个重载operator()的结构体,实现我们需要的排序逻辑:

#include <map>
#include <string>
#include <iostream>

struct CustomCompare {
    // 支持任意键值类型的模板化运算符
    template <typename KeyType, typename ValueType>
    bool operator()(const std::pair<const KeyType, ValueType>& a, const std::pair<const KeyType, ValueType>& b) const {
        // 先按键升序比较
        if (a.first != b.first) {
            return a.first < b.first;
        }
        // 键相等时,按值降序比较(这里用b.second < a.second来实现降序)
        return b.second < a.second;
    }
};

int main() {
    // 使用自定义比较器创建multimap
    std::multimap<int, std::string, CustomCompare> myMap;

    // 插入测试数据
    myMap.insert({1, "apple"});
    myMap.insert({2, "banana"});
    myMap.insert({1, "cherry"});
    myMap.insert({1, "date"});
    myMap.insert({2, "elderberry"});

    // 遍历输出验证排序结果
    for (const auto& entry : myMap) {
        std::cout << entry.first << ": " << entry.second << std::endl;
    }
    return 0;
}

实现方式2:使用Lambda表达式(C++11及以上)

如果不想定义单独的结构体,用lambda表达式会更简洁:

#include <map>
#include <string>
#include <iostream>

int main() {
    // 定义lambda作为比较器
    auto comp = [](const auto& a, const auto& b) {
        if (a.first != b.first) {
            return a.first < b.first;
        }
        return b.second < a.second;
    };

    // 用decltype推导lambda的类型,创建multimap
    std::multimap<int, std::string, decltype(comp)> myMap(comp);

    // 插入测试数据并输出(和上面示例一致)
    myMap.insert({1, "apple"});
    myMap.insert({2, "banana"});
    myMap.insert({1, "cherry"});
    myMap.insert({1, "date"});
    myMap.insert({2, "elderberry"});

    for (const auto& entry : myMap) {
        std::cout << entry.first << ": " << entry.second << std::endl;
    }
    return 0;
}

输出结果

两种方式的输出都是:

1: date
1: cherry
1: apple
2: elderberry
2: banana

完全符合按键升序、键同值降序的需求。

内容的提问来源于stack exchange,提问作者Abhishek kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:46:17