C++ set/multiset 容器(关联式容器)

本文介绍了C++中set容器的基本概念,如何使用仿函数自定义排序,并讨论了set与multiset的区别。通过实例演示了pair对组创建和仿函数在set排序中的应用。重点讲解了仿函数的概念、优缺点及作用。
摘要由CSDN通过智能技术生成

1. 基本概念

 包含头文件:#include <set>    //set和multiset一样

 自动排序!

P.S. 对于自定义的数据类型,要指定排序规则(使用仿函数)

2. 构造函数

 

3. 大小和交换

set不能resize。

 4. 插入和删除

 无法在指定位置插入数据,因为set会默认进行排序。

5. 查找和统计

6. set和multiset 区别

 

7. pair对组创建

 

	pair<string, int> p1 = make_pair("Jerry", 20);
	pair<string, int> p2("Jerry", 20);
	cout << "name: " << p1.first << " age: " << p1.second << endl;

8. set容器排序

利用仿函数修改set的排序规则。

仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。

仿函数是定义了一个含有operator()成员函数的类,可以视为一个一般的函数,只不过这个函数功能是在一个类中的运算符operator()中实现,是一个函数对象,它将函数作为参数传递的方式来使用。调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。

仿函数的优缺点:

优点:
1)仿函数比函数指针的执行速度快,函数指针时通过地址调用,而仿函数是对运算符operator进行自定义来提高调用的效率。
2)仿函数比一般函数灵活,可以同时拥有两个不同的状态实体,一般函数不具备此种功能。
3)仿函数可以作为模板参数使用,因为每个仿函数都拥有自己的类型。
缺点:
1)需要单独实现一个类。
2)定义形式比较复杂。


仿函数的作用:
1)作为排序规则,在一些特殊情况下排序是不能直接使用运算符<或者>时,可以使用仿函数。
2)作为判别式使用,即返回值为bool类型。
3)同时拥有多种内部状态,比如返回一个值得同时并累加。
4)作为算法for_each的返回值使用

示例:仿函数用作排序规则

class KCompare   //仿函数指定排序规则
{
public:
	bool operator()(int v1, int v2) //重载()运算符
	{
		return v1 > v2;
	}

};


void test05()
{
	set<int, KCompare> s1;
	s1.insert(10);
	s1.insert(70);
	s1.insert(50);
	s1.insert(20);
	s1.insert(30);
	s1.insert(200);

	for (set<int, KCompare>:: iterator it = s1.begin(); it != s1.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值