c++ 为容器添加比较的方法

在这里我总结一下网上看来的方法,以map为例:

方法一:

#include <iostream>
#include <utility>
#include <string>
#include <map>
using namespace std;
bool my_compare(const string &str1, const string &str2)
{
    return str1 > str2;
}

typedef bool (*comp)(const string &,const string &);
int main(int argc, char *argv[])
{
    map<string, int, comp> my_map(my_compare);
    my_map["wjj"] = 1;
    my_map["lqm"] = 2;
    my_map["mei"] = 3;
    map<string, int,comp>::const_iterator itr = my_map.begin();
    while ( itr != my_map.end()) {
        cout << itr->first << " : " << itr->second << endl;
        itr++;
    }
    return 0;
}

方法二:

#include <iostream>
#include <map>
#include <string>
using namespace std; 
 
class key
{
public:
       float eyesight;
       float height;
 
       key(float x, floaty):eyesight(x), height(y)
       {
       }
 
       friend bool operator < (constkey&,const key&);
};
 
bool operator < (constkey& key1,const key& key2)
{
       // 按eyesight升序 + height升序排列
       if(key1.eyesight != key2.eyesight)      
              return (key1.eyesight < key2.eyesight);
       else
              return (key1.height < key2.height);
      
       // 按eyesight降序 + height降序排列
       //if(key1.eyesight != key2.eyesight)    
       //     return(key1.eyesight > key2.eyesight);
       //else                                 
       //     return(key1.height > key2.height);
 
       // 按eyesight升序 + height降序排列
       //if(key1.eyesight != key2.eyesight)    
       //     return(key1.eyesight < key2.eyesight);
       //else                                 
       //     return(key1.height > key2.height);
 
       // 按eyesight降序 + height升序排列
       //if(key1.eyesight != key2.eyesight)    
       //     return(key1.eyesight > key2.eyesight);
       //else                                 
       //     return(key1.height < key2.height);
}
 
class Student
{
private:
         int id;                   //学号
         string name;              // 姓名
         float eyesight;           //视力
         float height;             //身高
         float chinese;            //语文成绩
         float english;            //英文成绩
         float math;               //数学成绩
public:
       Student(int id, string name,floateyesight,float height,float chinese,float english,float math)
       {
              this->id = id;
              this->name = name;
              this->eyesight = eyesight;
              this->height = height;
              this->chinese = chinese;
              this->english = english;
              this->math = math;
       }
 
       int get_id()
       {
              return id;
       }
 
       string get_name()
       {
              return name;
       }
 
       float get_eyesight()
       {
              return eyesight;
       }
 
       float get_height()
       {
              return height;
       }
 
       float get_chinese()
       {
              return chinese;
       }
 
       float get_english()
       {
              return english;
       }
 
       float get_math()
       {
              return math;
       }
};
 
int main(int argc,char**argv)
{
       map<key,Student> stu_map;
 
       Studentstu4(4, "Dudley",1.1f, 170.2f, 90.5f, 89.5f, 93.0);
       Studentstu3(3, "Chris", 1.1f, 163.4f, 93.5f,90.0f, 83.5f);
       Studentstu2(2, "Bob", 1.5f, 166.6f, 86.0f,98.5f, 85.0f);
       Studentstu1(1, "Andrew", 1.5f, 173.2f, 98.5f,100.0f, 100.f);
 
       stu_map.insert(make_pair(key(stu4.get_eyesight(),stu4.get_height()), stu4));
       stu_map.insert(make_pair(key(stu3.get_eyesight(),stu3.get_height()), stu3));
       stu_map.insert(make_pair(key(stu2.get_eyesight(),stu2.get_height()), stu2));
       stu_map.insert(make_pair(key(stu1.get_eyesight(),stu1.get_height()), stu1));
 
       map<key,Student>::iterator iter;
       for(iter = stu_map.begin(); iter != stu_map.end();++iter)
       {
             cout<< iter->first.eyesight << "\t"<< iter->first.height  << "\t" << iter->second.get_id()<<"\t" <<iter->second.get_name() << endl;
       }
 
       return 0;
}

参考:http://blog.csdn.net/pathuang68/article/details/7526305

        http://blog.csdn.net/challenge_c_plusplus/article/details/7429963

如果还有其他方法还请指教。

原文地址:https://www.cnblogs.com/wghost/p/2549165.html