c++ - 按字母顺序按两个标准对向量内的结构进行排序
问题描述
我有以下数据结构(第一个字符串作为学校的“主题”)
map<string, vector<School>> information;
而学校是:
struct School {
string name;
string location;
}
我无法按字母顺序(第一个主题,然后是位置,然后是名称)打印我的整个数据结构。举个例子。
"map key string : struct location : struct name"
"technology : berlin : university_of_berlin"
到目前为止,我设法通过
for (auto const key:information) {
//access to struct
vector<School> v = key.second;
//sorting by location name
//comparasion done by seperate function that returns school.location1 < school.location2
sort(v.begin(), v.end(), compare);
如果我打印出主题(key.first)和v.location,它几乎完成了。地图默认排序,位置比较有效。但我不知道如何按名称添加第二个比较。如果我再次按名称进行排序,那么我会丢失按位置的原始顺序。是否有可能以某种方式“双重排序”,其中一个标准更重要,然后另一个?
解决方案
你可以,你只需要添加一些条件compare
bool compare(School const& lhs, School const& rhs)
{
if(lhs.location != rhs.location)
return lhs.location < rhs.location)
return lhs.name < rhs.name
}
或者您可以<
像@ceorron 那样重载运算符
推荐阅读
- android - adb 不工作,不显示任何响应
- sql - sql 或 postgresql 用逗号分隔查询表列
- highcharts - HighStock:工具提示忽略本地化
- jenkins - 无法部署工件:无法传输工件
- java - 当新图像传入时,保持 ffmpeg 将图像转换为视频
- bash - 如果 BASH 中只有三个变量中的一个为 True,如何返回 True?
- angular - 在 Angular 库中导入路径
- java - 知道为什么这个请求适用于 curl 而不是 java 吗?
- android - 添加 LiveData 观察者时 Android 崩溃
- regex - 使用位置值选择子字符串的正则表达式