首页 > 代码库 > stl中map自定义比较函数
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; }
stl中map自定义比较函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。