目标:
set容器默认排序规则为从小到大,掌握如何改变排序规则
主要技术点:
利用仿函数,可以改变排序规则
//set容器排序
class MyCompare
{
public:
bool operator()(int v1,int v2)//仿函数:返回是布尔类型,重载的符号是()
//第一个小括号表示我重载的符号,第二个小括号表示重载符号这个函数体的参数列表
{
return v1 > v2;//做降序排列
}
};
void test01()
{
set<int>s1;
s1.insert(10);
s1.insert(40);
s1.insert(20);
//指定排序规则为从大到小
//数据插完的时候就已经按照他所默认的排序规则了,所以想改变他的排序规则需要在创建容器的时候就声明了
set<int, MyCompare>s1;
//在模版参数列表中是放数据类型的,不能放函数名,所以放仿函数来指定他的规则
}
总结:利用仿函数可以指定set容器的排序规则
2.set容器排序(自定义数据类型)
//set容器排序,存放自定义数据类型
class Person//自定义数据类型
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class comparePerson//仿函数
{
public:
bool operator( )(const Person& pl, const Person& p2)
{
//按照年龄 降序
return pl.m_Age > p2.m_Age;
}
};
void test01()
{
set<Person, comparePerson>s;
//创建Person对象
//自定义数据类型 都会指定排序规则
Person p1("刘备", 24);
Person p2("关羽", 28);
Person p3("张飞", 25);
Person p4("赵云", 21);
s.insert(p1);//插入报错
s.insert(p2);
s.insert(p3);
s.insert(p4);
//遍历
for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++)
{
cout << "姓名: " << it->m_Name << "年龄: " << it->m_Age << endl;
}
}
仅个人看视频笔记与理解,如有误可指出谢谢