C++ vector的排序------对于结构体vector, 需要自己实现比较

    xiaoxiao2026-04-13  4

      在很多面试中, 都会问到: 结构体作为map的key, 需要注意什么?  这个问题, 我在http://blog.csdn.net/stpeace/article/details/46553525中已经深入讨论过, 所以不再赘述。 本文来说说vector的排序, 最近刚好要涉及到, 所以来写个代码demo

            由于结构体没有比较大小这一说法, 所以要实现结构体vector的排序, 必须自定义比较:

    [cpp]  view plain  copy #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 << '\t' << 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

    转载请注明原文地址: https://ju.6miu.com/read-1308785.html
    最新回复(0)