C++:set容器自定义数据类型的自定义排序
在学习set/multiset容器时,容器如果非自己指定(如数据类型、排序规则),默认遵循从小到大的排序规则,今天以set容器为例,介绍如何对自定义数据类型进行降序排序。毕竟,好记性不如烂笔头。一、关于set/multiset容器1、set/multiset,针对简单的成员,比如键(key)值(value)都是int型,容器默认遵循从小到大的升序排序规则;2、set容器不允许存在相同的键、值,而m
在使用set/multiset容器时,容器如果非自己指定(如数据类型、排序规则),默认遵循从小到大的排序规则,今天以set容器为例,介绍如何对自定义数据类型进行降序排序。
毕竟,好记性不如烂笔头。
一、关于set/multiset容器
1、set/multiset,针对简单的成员,比如键(key)值(value)都是int型,容器默认遵循从小到大的升序排序规则;
2、set容器不允许存在相同的键、值,而multiset容器则允许;
3、提供默认构造函数、拷贝构造函数、operator=重载函数;
4、提供size()、empty()、swap()方法;
5、提供insert(插入)、erase(删除)、clear(清除)方法;
二、编程需求
举个栗子,我们创建了一个“城堡”(Castle),城堡里配备有“餐厅”、“客厅”、“卧室”、“茅房”,他们的面积分别为235、666、350、999㎡,我们需要把城堡里的配置按面积从大到小排序展示出来,该怎么做?
三、编程思路
1、创建一个“城堡”类(class Castle),里面包含两个public成员变量:建筑名称(string m_Name)、建筑面积(int m_Area),同时提供一个有参构造函数(Castle(string name, int area));
2、类实例化,利用有参构造函数,创建c1("餐厅", 235)、c2("客厅", 666)、c3("卧室", 350)、c4("茅房", 999);
3、创建仿函数,自定义降序排序规则;
4、创建set容器,并利用insert把c1~c4放入容器;
5、利用iterator迭代器,把c1~c4逐一打印输出。
四、敲代码
#include <iostream>
using namespace std;
#include <string>
#include <set> //包含set容器头文件
//创建castle类
class Castle
{
public:
Castle(string name, int area) //提供有参构造函数
{
this->m_Name = name;
this->m_Area = area;
}
string m_Name; //建筑名称
int m_Area; //建筑面积
};
//创建降序仿函数(类)
class MyCustom
{
public:
//重载小括号()
bool operator()(const Castle& c1, const Castle& c2) const //注意后面加个const,否则报错
{
return c1.m_Area > c2.m_Area; //按建筑面积降序排序
}
};
int main()
{
//利用有参构造函数,创建对象
Castle c1("餐厅", 235);
Castle c2("客厅", 666);
Castle c3("卧室", 350);
Castle c4("茅房", 999);
//创建set容器,注意尖括号里面的内容,说明创建的是Castle类对象,同时按指定的方法排序
set<Castle, MyCustom> ss;
//insert插入数据,数据插入时,已按照指定的排序规则排序了
ss.insert(c1);
ss.insert(c2);
ss.insert(c3);
ss.insert(c4);
//利用iterator迭代器逐一输出
for (set<Castle, MyCustom>::iterator it = ss.begin(); it != ss.end(); it++)
{
cout << "名称:" << (*it).m_Name << " 面积:" << (*it).m_Area << "㎡" << endl;
}
system("pause");
return 0;
}
来看看最后的输出结果:
完美,哈哈哈。
总结
c++真是学过的编程语言里最难的,学完c++再回头看python,简直就是小儿科。
欢迎大家留言交流,喜欢的话记得三连。
更多推荐
所有评论(0)