C++ 学习之set容器排序

  • set容器默认排序规则为从小到大,利用仿函数,可以改变排序规则

  • 分为内置数据类型排序和自定义数据类型排序

  • set与list容器排序区别:
    list容器的排序是一个自带的sort成员函数,需要在sort中传一个函数名来指定排序规则;
    set是默认插入数据就自动排序的,所以需要在插数据之前用仿函数指定排序规则

具体排序方法见代码:

#include<iostream>
#include<string>
#include<set>
using namespace std;

/*
set与list容器排序区别:
list容器的排序是一个自带的sort成员函数,需要在sort中传一个函数名来指定排序规则;
set是默认插入数据就自动排序的,所以需要在插数据之前用仿函数指定排序规则
*/



/*************************************set容器内置数据类型排序***************************/
void printfIntSet(set<int>& s)//打印内置数据类型int数组的函数
{
	for (set<int>::iterator it = s.begin();it != s.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}


/*仿函数*/
class myCompare//int数组比较大小的类,也可称为数据类型
{
public:
	bool operator()(int v1, int v2)//仿函数的返回值是bool类型,重载了() 运算符
	{
		return v1 > v2;
	}
};

void test01()//set容器内置数据类型排序
{
	set<int> s;
	s.insert(10);
	s.insert(100);
	s.insert(1);
	s.insert(5);
	s.insert(80);

	printfIntSet(s);//默认是从小到大


	set<int, myCompare> s1;//在定义数组的时候指定排序规则
	s1.insert(10);
	s1.insert(100);
	s1.insert(1);
	s1.insert(5);
	s1.insert(80);

	for (set<int,myCompare>::iterator it = s1.begin();it != s1.end();it++)
	{
		cout << *it << " ";//数据输出变成降序了
	}

}


/*************************************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 Compare//指定排序规则的仿函数
{
public:
	bool operator()(const Person &p1, Person &p2)//加const限定不能修改传入的数据
	{
		return p1.m_age > p2.m_age;//降序
	}

};

void test02()//set容器自定义数据排序
{
	set<Person,Compare> s;

	Person p1("张三", 18);
	Person p2("李四", 20);
	Person p3("王五", 19);
	Person p4("赵六", 27);
	Person p5("王八", 15);

	s.insert(p1);
	s.insert(p2);
	s.insert(p3);
	s.insert(p4);
	s.insert(p5);

	for (set<Person, Compare>::iterator it = s.begin();it != s.end();it++)
	{
		cout << it->m_name << " " << it->m_age << endl;
	}

}


int main()
{
	//test01();//内置数据类型排序

	test02();//自定义数据类型排序

	return 0;
}
  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Python中,set是一种可变的、无序的集合类型,其中每个元素都是唯一的,不允许重复。可以使用set来执行多种集合操作,例如交集、并集和差集。 以下是一些使用set的示例: 1. 创建一个set: ``` my_set = {1, 2, 3} ``` 或者: ``` my_set = set([1, 2, 3]) ``` 2. 向set中添加元素: ``` my_set.add(4) ``` 3. 从set中删除元素: ``` my_set.remove(3) ``` 4. 求两个set的交集: ``` set1 = {1, 2, 3} set2 = {2, 3, 4} intersection = set1.intersection(set2) ``` 5. 求两个set的并集: ``` set1 = {1, 2, 3} set2 = {2, 3, 4} union = set1.union(set2) ``` 6. 求两个set的差集: ``` set1 = {1, 2, 3} set2 = {2, 3, 4} difference = set1.difference(set2) ``` 7. 判断一个元素是否在set中: ``` if 1 in my_set: print("1 is in the set") ``` 总之,set是一个非常有用的Python内置类型,可以帮助我们执行多种集合操作,特别是去除重复元素的时候非常方便。 ### 回答2: C++中的set是一个容器,用于存储一组唯一的元素,且按照升序排序。下面是关于set容器的用法: 1. 包含头文件:首先需要包含头文件<set>。 2. 创建set对象:使用关键字set创建set对象,可以指定元素类型和排序规则。例如,创建一个存储整数的set对象:set<int> mySet; 3. 插入元素:使用insert()函数将元素插入到set容器中。例如,将元素5插入到mySet中:mySet.insert(5); 4. 访问元素:set不支持直接访问元素,因为set中的元素是按照排序规则存储的。可以使用迭代器进行遍历和访问元素。例如,遍历并打印mySet中的所有元素: ``` for(auto it = mySet.begin(); it != mySet.end(); ++it) { cout << *it << " "; } ``` 5. 删除元素:使用erase()函数可以删除set中的指定元素。例如,删除元素5:mySet.erase(5); 6. 查找元素:使用find()函数可以查找set中是否包含指定元素。该函数返回一个迭代器,指向要查找的元素。如果元素存在,则返回指向该元素的迭代器;否则,返回set的end()迭代器。 7. 其他操作:除了上述常用操作外,set还支持很多其他操作,例如计数元素个数、清空容器、合并两个set等。详细的操作可以参考C++set文档。 注意事项: - set中的元素是唯一的,重复的元素将不会被插入。 - set中的元素是有序的,插入和删除操作的时间复杂度较低。 这是关于set容器的简要用法说明,希望对你有所帮助! ### 回答3: C++中的set容器是一个内部元素不重复、自动排序容器。它位于<set>头文件中,可以使用以下步骤来使用set容器: 1. 包含头文件:<set> 在使用set容器之前,需要包含<set>头文件。 2. 声明set容器: 使用set容器之前,需要声明一个set对象。可以根据需要指定元素类型,也可以使用默认的less比较函数进行元素的比较。 ``` set<int> mySet; // 声明一个存储int类型的set容器 set<string> mySet; // 声明一个存储string类型的set容器 ``` 3. 插入元素: 使用insert()函数向set容器中插入元素。set容器会自动进行元素的排序,且不会有重复的元素。 ``` mySet.insert(10); // 向set容器中插入元素10 mySet.insert(20); // 向set容器中插入元素20 mySet.insert(30); // 向set容器中插入元素30 // 重复元素将不会被插入 mySet.insert(10); // 不会向set容器中插入重复的元素10 ``` 4. 遍历元素: 可以使用迭代器或者范围for循环遍历set容器中的元素。 ``` for(auto iter = mySet.begin(); iter != mySet.end(); ++iter) { cout << *iter << " "; // 输出set容器中的元素 } // 或者使用范围for循环 for(const auto& element : mySet) { cout << element << " "; // 输出set容器中的元素 } ``` 5. 使用set容器的其他操作: set容器提供了许多其他操作,如查找元素、删除元素、判断元素是否存在等。可以根据具体需求选用合适的函数进行操作。 以上就是使用set容器的基本步骤,通过这些步骤可以方便地使用set容器实现元素不重复、有序的存储和访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值