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

C++如何对map内vector存储的School结构体按多条件字母序排序

实现方案

完全可以在一次排序中完成多优先级规则,不需要分两次排序,只要修改自定义比较函数的逻辑即可:在比较器中优先判断高优先级的location字段,仅当两个元素的location相等时,再判断第二优先级的name字段。


代码示例

1. 修改单独的compare比较函数

bool compare(const School& a, const School& b) {
    // 第一优先级:按location字典序升序排列
    if (a.location != b.location) {
        return a.location < b.location;
    }
    // location相同时,第二优先级:按name字典序升序排列
    return a.name < b.name;
}

原来的sort调用逻辑不需要改动,直接使用这个修改后的compare函数即可。

2. 也可以直接用lambda内联写比较逻辑(C++11及以上支持)

不需要单独定义compare函数,直接在sort调用处编写规则:

for (auto const& entry : information) {
    vector<School> v = entry.second;
    // 一次排序完成双优先级规则
    sort(v.begin(), v.end(), [](const School& a, const School& b) {
        if (a.location != b.location) return a.location < b.location;
        return a.name < b.name;
    });
    // 后续按要求格式输出即可
    for (auto const& school : v) {
        cout << "\"" << entry.first << " : " << school.location << " : " << school.name << "\"" << endl;
    }
}

补充说明

C++标准库的std::map本身默认就是按key的字典序升序排列,已经满足你要求的最高优先级排序规则,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:18:01