c++ map 自定义结构体值排序
时间: 2023-06-05 13:47:25 浏览: 168
提供自定义的排序谓词-嵌入式实时操作系统uc/os-ii
在C++中,使用STL库中的map容器可以方便地实现键值对的映射。但是,当要按照自定义结构体的某个属性进行排序时,需要使用自定义排序函数。
假设我们有以下结构体:
```
struct Student {
string name;
int age;
};
```
我们使用map存储学生信息,其中键为学生姓名,值为学生结构体类型。如果要按照学生年龄从小到大排序,可以通过定义一个自定义排序函数来实现,如下:
```
bool cmp(const pair<string, Student>& p1, const pair<string, Student>& p2) {
return p1.second.age < p2.second.age;
}
```
其中,pair<string, Student>表示map中的一个键值对,p1.second.age表示p1中存储的学生信息的年龄属性。该函数返回true表示p1 < p2,返回false表示p1 >= p2。
然后,在插入map元素时,使用sort函数和自定义排序函数即可实现排序:
```
map<string, Student> m;
// 插入元素...
vector<pair<string, Student>> vec(m.begin(), m.end());
sort(vec.begin(), vec.end(), cmp);
```
其中,vec是一个键值对pair的vector类型,可以直接使用sort函数排序,然后再将排序后的结果存入map即可。
总之,使用自定义排序函数可以方便地对map中的结构体类型的值实现排序功能。
阅读全文