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

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;

}

猜你喜欢

转载自blog.csdn.net/MWooooo/article/details/126706159
今日推荐