在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;
}