set容器默认排序规则为从小到大
利用仿函数,可以改变排序规则
1.set存放内置数据类型
#include <iostream>
using namespace std;
#include <set>
class mycompare
{
public:
bool operator()(int v1,int v2){
return v1>v2;
}
};
void test01()
{
set<int> s1;
s1.insert(1);
s1.insert(4);
s1.insert(2);
s1.insert(5);
s1.insert(3);
for(set<int>::iterator it=s1.begin();it!=s1.end();it++){
cout<<*it<<" ";
}
cout<<endl;
//1 2 3 4 5 默认从小到大排序
//利用仿函数
set<int,mycompare> s2;
s2.insert(1);
s2.insert(4);
s2.insert(2);
s2.insert(5);
s2.insert(3);
for(set<int>::iterator it=s2.begin();it!=s2.end();it++){
cout<<*it<<" ";
}
cout<<endl;
//5 4 3 2 1
}
int main()
{
test01();
return 0;
}
2.set存放自定义数据类型
#include <iostream>
using namespace std;
#include <set>
#include <string>
class Person
{
public:
Person(string name,int age){
this->name=name;
this->age=age;
}
string name;
int age;
};
class compareperson
{
public:
bool operator()(const Person& p1,const Person& p2){
return p1.age < p2.age;
}
};
void test01()
{
set<Person,compareperson> s;
Person p1("amy",24);
Person p2("lili",28);
Person p3("lihua",25);
Person p4("zhangsan",21);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
for(set<Person>::iterator it=s.begin();it!=s.end();it++){
cout<<it->name<<" "<<it->age<<endl;
}
}
int main()
{
test01();
return 0;
}