内容
set容器对内置数据类型、自定义数据类型指定排序规则。
运行代码
(1)内置数据类型
#include <iostream>
#include <set>
using namespace std;
// set容器默认排序规则为升序(从小到大),可以通过仿函数来改变排序顺序
// 仿函数就是在类中重载了()运算符,使这个类有了类似函数的行为
class myCompare
{
public:
bool operator()(int v1, int v2) const // 注意加const
{
return v1 > v2; // 更改为降序(从大到小)
}
};
void test01()
{
// set容器要在还没入插数据之前对排序进行改变
set<int, myCompare> s1; // 注意变化
s1.insert(20);
s1.insert(30);
s1.insert(40);
s1.insert(10);
// 注意迭代器的变化
for (set<int, myCompare>::iterator it = s1.begin(); it != s1.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
test01();
return 0;
}
(2)自定义数据类型
#include <iostream>
#include <string>
#include <set>
using namespace std;
class Person
{
public:
string m_Name;
int m_Age;
public:
Person(string name, int age)
{
this->m_Age = age;
this->m_Name = name;
}
};
class comparePerson
{
public:
bool operator()(const Person &p1, const Person &p2) const
{
return p1.m_Age > p2.m_Age;
}
};
void test01()
{
// 对于自定义数据类型,set必须指定排序规则才可以插入数据
set<Person, comparePerson> s1;
Person p1("s1", 11);
Person p2("s2", 22);
Person p3("s3", 33);
Person p4("s4", 44);
s1.insert(p1);
s1.insert(p2);
s1.insert(p3);
s1.insert(p4);
for (set<Person, comparePerson>::iterator it = s1.begin(); it != s1.end(); it++)
{
cout << it->m_Name << " " << it->m_Age << endl;
}
}
int main()
{
test01();
return 0;
}