标签: stl中map自定义比较函数

版权声明:本文为博主原创文章,未经博主允许不得转载。
在stl中自定义map比较函数有两种方式,方式一在类中重载<操作符,方式二仿比较函数
1、方式一:重载<操作符
- #include "stdafx.h"
- #include <map>
- #include <string>
- #include <iostream>
- using namespace std;
- class Key
- {
- public:
- Key(string name, int age)
- {
- this->name=name;
- this->age=age;
- }
- ~Key(){}
- string getName()
- {
- return name;
- }
- int getAge()
- {
- return age;
- }
- bool operator<(const Key& key) const
- {
- if(age!=key.age)
- {
- return age<key.age;
- }
- else
- {
- return false;
- }
- }
- private:
- string name;
- int age;
- };
- int main(void)
- {
- Key key1("cjc",25);
- Key key2("ldb",26);
- Key key3("jzm",27);
- map<Key,string> s;
- s[key1]="He is a boy.";
- s[key2]="He is a student.";
- s[key3]="He is a old man.";
- map<Key,string>::iterator it=s.begin();
- while(it!=s.end())
- {
- cout<<"Name : "<<((Key)it->first).getName()<<endl;
- cout<<"Age : "<<((Key)it->first).getAge()<<endl;
- cout<<"Desc : "<<it->second<<endl;
- cout<<"--------------------------------------"<<endl;
- it++;
- }
- system("pause");
- return 0;
- }
2、方式二:仿比较函数
- #include "stdafx.h"
- #include <map>
- #include <string>
- #include <iostream>
- using namespace std;
- typedef struct key
- {
- string name;
- int age;
- }Key;
- struct cmpKey
- {
- bool operator()(const Key& key1, const Key& key2)
- {
- if(key1.age!=key2.age)
- {
- return key1.age<key2.age;
- }
- else
- {
- return false;
- }
- }
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- map<Key,string,cmpKey> s;
- Key key1,key2,key3;
- key1.age=24;
- key1.name="cjc";
- s[key1]="He is a boy!";
- key2.age=24;
- key2.name="ldb";
- s[key2]="He is a student!";
- key3.age=26;
- key3.name="jzm";
- s[key3]="He is an old man!";
- map<Key,string,cmpKey>::iterator it=s.begin();
- while(it!=s.end())
- {
- cout<<"Age : "<<it->first.age<<endl;
- cout<<"Name : "<<it->first.name<<endl;
- cout<<"Desc : "<<it->second<<endl;
- cout<<"---------------------------------"<<endl;
- it++;
- }
- system("pause");
- return 0;
- }