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
相关产品推荐
相关产品推荐

