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/archive/2012/06/14/2549165.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/52680

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午4:07
下一篇 2023年2月9日 上午4:07

相关推荐