C++ vector的排序------对于结构体vector, 需要自己实现比较
在很多面试中, 都会问到: 结构体作为map的key, 需要注意什么? 这个问题, 我在http://blog.csdn.net/stpeace/article/details/46553525中已经深入讨论过, 所以不再赘述。 本文来说说vector的排序, 最近刚好要涉及到, 所以来写个代码demo
由于结构体没有比较大小这一说法, 所以要实现结构体vector的排序, 必须自定义比较:
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Msg { int id; int score; }; // 按id排列 bool selfDefinedSort1( const Msg &m1, const Msg &m2) { return m1.id < m2.id; } // 按score排列 bool selfDefinedSort2( const Msg &m1, const Msg &m2) { return m1.score < m2.score; } // 添加元素 void addToVector(vector<Msg> & vecMsg, const int &id, const int &score) { Msg msg; msg.id = id; msg.score = score; vecMsg.push_back(msg); } // 打印vector void printVector(vector<Msg> &vecMsg) { for(vector<Msg>::iterator it = vecMsg.begin() ; it != vecMsg.end() ; it++ ) { cout << it->id << " " << it->score << endl; } } int main() { vector<Msg> vecMsg; addToVector(vecMsg,9, 100); addToVector(vecMsg,8, 87); addToVector(vecMsg,6, 90); addToVector(vecMsg,7, 82); addToVector(vecMsg,5, 85); cout << "before Sort:" << endl; printVector(vecMsg); cout << "after Sort1:" << endl; sort(vecMsg.begin(), vecMsg.end(), selfDefinedSort1); printVector(vecMsg); cout << "after Sort2:" << endl; sort(vecMsg.begin(), vecMsg.end(), selfDefinedSort2); printVector(vecMsg); return 0; }结果:
before Sort:
9 100
8 87
6 90
7 82
5 85
after Sort1:
5 85
6 90
7 82
8 87
9 100
after Sort2:
7 82
5 85
8 87
6 90
9 100
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: linux中umask命令/函数的用法简介
- 下一篇: 自己写个ping程序玩玩---附带抓包