存放自定义数据类型必须要指定排序规则
#include <iostream>
#include <queue>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class myCompare
{
public:
bool operator()(const Person &p1,const Person &p2)
{
return p1.m_Age > p2.m_Age;
}
};
void print(const set<Person,myCompare>& s)
{
for(set<Person,myCompare>::const_iterator it = s.begin(); it != s.end(); it++)
{
cout<< (*it).m_Name <<" " << (*it).m_Age <<endl;
}
}
void test()
{
set<Person,myCompare>s;
Person p1("lcl",23);
Person p2("xqq",20);
Person p3("hqq",23);
Person p4("wxr",22);
Person p5("lcl",22);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
s.insert(p5);
print(s);
}
int main()
{
test();
return 0;
}
输出结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201024094444956.png#pic_center)
代码示例
名字相同,按照年龄排序
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this->m_Name = name;
this->m_Age = age;
}
// Person(const Person &p)
// {
// this->m_Name = p.m_Name;
// this->m_Age = p.m_Age;
// }
/*
bool operator<(const Person &rhs) const
{
if(!m_Name.compare(rhs.m_Name))
{
return m_Age<rhs.m_Age;
}
else return m_Name.compare(rhs.m_Name) < 0;
}
*/
// Person& operator = (const Person &rhs)
// {
// m_Name = rhs.m_Name;
// m_Age = rhs.m_Age;
// }
string m_Name;
int m_Age;
};
class myCompare
{
public:
bool operator()(const Person &p1,const Person &p2)
{
if(!p1.m_Name.compare(p2.m_Name)) { //如果名字相等,则按从大到小排列
return p1.m_Age>p2.m_Age;
}
else return p1.m_Name.compare(p2.m_Name) < 0;
}
};
// void print(const set<Person,myCompare>& s)
// {
// for(set<Person,myCompare>::const_iterator it = s.begin(); it != s.end(); it++)
// {
// cout<< (*it).m_Name <<" " << (*it).m_Age <<endl;
// }
// }
void print(const set<Person,myCompare> &s)
{
for(set<Person>::const_iterator it = s.begin(); it != s.end(); it++)
{
cout << (*it).m_Name << " " << (*it).m_Age <<endl;
}
}
void test()
{
set<Person,myCompare> s;
//set<Person,myCompare>s;
Person p1("lcl",23);
Person p2("xqq",20);
Person p3("hqq",23);
Person p4("wxr",22);
Person p5("lcl",22);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
s.insert(p5);
print(s);
}
int main()
{
test();
return 0;
}
结果输出
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201024202248169.png#pic_center)