set中自定义比较函数
使用insert()将元素插入到集合中去的时候,集合会根据设定的比较函数将该元素放到该放的节点上去。在定义集合的时候,如果没有
指定比较函数,那么采用默认的比较函数(按键值又小到大的顺序插入元素)。
编写比较函数的两张方法:
1.如果元素不是结构体,那么可以编写比较函数。
#include <iostream> #include <set> #include <iterator> using namespace std;
struct myComp { bool operator() (const int &a, const int &b) { return a > b; } }; int main() { set<int, myComp> s1; for(int i = 1; i < 6; i++) s1.insert(i*i); s1.insert(8); set<int, myComp>::iterator it = s1.begin(); for(; it != s1.end(); it++) { cout<<*it<<" "; } return 0; }
|
2.如果元素是结构体,那么可以直接把比较函数写在结构体内。
#include <iostream> #include <set> #include <iterator> #include <string> using namespace std; struct Info { string name; float score; bool operator< (const Info &a)const { return a.score > score; } }; int main() { set<Info> s; Info info; info.name = "Messi"; info.score = 8.5; s.insert(info); info.name = "Ronae"; info.score = 9.0; s.insert(info); info.name = "My"; info.score = 7.0; s.insert(info); info.name = "Perno"; info.score = 8.0; s.insert(info); info.name = "Arzar"; info.score = 8.5; s.insert(info); set<Info>::iterator it; for(it = s.begin(); it != s.end(); it++) { cout<<it->name<<" : "; cout<<(*it).score<<endl; } return 0; }
|