STLのソートは、ソート条件を複数回繰り返しオブジェクトコンテナを達成することができます

1の#include <iostreamの>
 2の#include < ストリング >
 3の#include <ベクトル>
 4の#include <アルゴリズム>
 5  
6  使用して 名前空間STDを、
7  
8  クラス猫{
 9  公共10      INT ID。
11      文字列名。
12      int型の年齢;
13      キャット(INT I、 N、int型A){
 14          、ID = I。
15          名= N。
16         =年齢A;
 17          
18である     }    
 19  };
 20は 
21であり、 / * 
22れる その比較関数を実装:
 23  形式:
 24      BOOL COMPNAME(Obj1と、OBJ2);
 25  注:
 26  1つの関数は、ブール値を返す必要があります
 27  関数が返す場合2.真は、パラメータまたは規格がこの順(即ち、なしスワップ)、すなわち、スワップfalseを返すに順序付けすることを意味
 28  ;機能3.ソート(beginIndexパラメータ、endIndexの、COMPNAME)第3パラメータ
 29  
30  * / 
31である BOOL(myCompare * CAT、CAT * B){
 32の     // 昇順IDにプレス
33は、     IF(A->番号<B-> ID)リターン trueに34は      IF(A-> ID> B-> ID)リターン falseに35      {
 36          // 同じID
 37          // 辞書名注文によって
38は、         IF(A-> name.compare(B->名)< 0リターン trueに39           IF(A-> name.compare(B->名)> 0リターン falseに40          {
 41である             // 年齢によって小から大へ、同じ名前
42は、             IF(A->年齢<B- >年齢)リターン trueに43は、             IF(A->年齢> B->年齢)リターン Falseに44は             {
 45                  // 同じ年齢
 46                  // trueに戻り
47                  リターン trueに;
 48              }
 49          }
 50          
51である     }
 52である }
 53が 
54である 
55  INT 主は、(){
 56は、      ベクトル<猫*> Vは、
 57である      v.push_back(新しい新しい猫(1。 " ジム"1。 ));
 58      v.push_back(新しい新しい猫(1" "1 ))。
59      v.push_back(新しい猫(1" Jimb "1 ));
60      v.push_back(新しい猫(1" Jimc "1 ));
61      v.push_back(新しい猫(1" J "1 ))。
62      v.push_back(新しい猫(2" ジム"1));
63      v.push_back(新しい猫(2" Jizzz "1 ));
64      v.push_back(新しい猫(2" ジム"2 ));
65      v.push_back(新しい猫(2" ジム"3 ));
66      ソート(myCompare、(V)、終了(V)を開始します)。
67      のためにINT iは= 0 ; I <v.size(); I ++ ){
 68          猫* C =V [i]は、
69          coutの<< C-> ID << "  " << C->名<< "  " << C->年齢<< てendl;
70      }
 71      
72  }
 73  
74  / * 
75  出力:
 76  1 J 1
 77  1ジム1
 78  1島1
 79  1 Jimb 1
 80  1 Jimc 1
 81  2ジム1
 82  2ジム2
 83  2ジム3
 84  2 Jizzz 1
 85  
86  * /

 

おすすめ

転載: www.cnblogs.com/XT-xutao/p/12008506.html