自己写一个仿函数(相当于一个数据类型)
自定义数据类型
#include<iostream> using namespace std; #include<set> #include<cstring> //仿函数 //在插入数据之前进行排序 class Person //一个类 { public: string m_Name; int m_Age; Person(string name,int age) { this->m_Name=name; this->m_Age=age; } //自定义数据类型都会指定排序规则 }; class MyCompare { public: bool operator()(const Person &p1,const Person &p2) { if(p1.m_Age!=p2.m_Age) return p1.m_Age>p2.m_Age; //年龄升序 else return p1.m_Name<p2.m_Name; } }; void test01() { set<Person,MyCompare> s; Person p1("Lily",20); Person p2("b",24); Person p3("a",24); Person p4("b",40); s.insert(p1); s.insert(p2); s.insert(p3); s.insert(p4); for(auto it=s.begin();it!=s.end();it++) { cout<<it->m_Name<<" "<<it->m_Age<<endl; } } int main() { test01(); return 0; }
set
#include<iostream> using namespace std; #include<set> //仿函数 //在插入数据之前进行排序 class MyCompare //一个类 { public: bool operator()(int v1,int v2) { return v1>v2; } }; void test01() { set<int,MyCompare>s; //默认升序 s.insert(1); s.insert(10); s.insert(45); s.insert(7); for(auto it=s.begin();it!=s.end();it++) { cout<<*it<<endl; } } int main() { test01(); return 0; }
map
#include <iostream> #include<map> using namespace std; class MyCompare { public : bool operator()(int v1,int v2) { //从大到小,降序 return v1>v2; } }; void test01() { map<int,int,MyCompare> mp; //key value mp.insert({1,12}); mp.insert({78,1245}); mp.insert({4,12}); mp.insert({7,1245}); mp.insert({1,126}); mp.insert({788,1245}); mp.insert({1,12}); mp.insert({78,1245}); for(auto it=mp.begin();it!=mp.end();it++) { cout<<it->first<<" "<<it->second<<endl; } } int main() { test01(); return 0; }