c++提高篇——set/multiset容器

一、基本概念

在set容器中所有元索都会在插入时自动被排序,底层结构是用二叉树实现的。
set和multiset区别:
set不允许容器中有重复的元素
multiset允许容器中有重复的元素

二、构造函数和赋值操作

构造
set st; 默认构造函数。
set(const set &st); 拷贝构造函数。
赋值
set& operator=(const set &st);重载等号操作符。

三、大小操作和交换操作

size();返回容器中元素的数目
empty():判断容器是否为空
swap(st);交换两个集合容器

四、插入和删除

插入数据
insert (elem)在容器中插入元素。
clear();清除所有元素
erase(pos);删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg,end);删除区间[beg,end)的所有元素,返回下一个元素的迭代器。
erase(elem);删除容器中值为elem的元素。
插入数据时只有insert的方式,没有push等操作方式。

五、查找和统计

find(key);查找key是否存在,若存在,返回该键的元素的迭代器(位置);若不存在,返回set.end();
count(key);统计key的元素个数,对于set而言,count返回的不是0就是1,因为其不能存放重复的数值。
查找样例如下:

	set<int> s;

	s.insert(20);
	s.insert(10);
	s.insert(30);
	s.insert(40);

	set<int>::iterator pos = s.find(10);
	cout << *pos << endl;

六、set与mulitset的区别

1、set不可以插入重复数据,而multiset可以
2、set插入数据的同时会返回插入结果,表示插入是否成功,multiset不会检测数据。因此可以插入重复数据。

七、pair对组创建

可以利用对组返回两个数据,其具体实现如下:
pair<type, type>Tp ( value1,value2 );
pair<type, type> p = make_pair( value1, value2 );
样例如下:

	pair<string, int> p("wer", 20);
	cout << "姓名为: " << p.first << "年龄为:  " << p.second << endl;

	pair<string, int> p2 = make_pair("1w", 30);
	cout << "姓名为: " << p2.first << "年龄为:  " << p2.second << endl;

八、set容器的排序

set容器默认排序规则为从小到大,利用仿函数,可以改变排序规则。
自定义的数据类型都需要提前指定排序规则。
样例如下:

class MyCompare
{
public:
	bool operator()(int s1, int s2)
	{
		return s1 > s2;
	}
};

void test08()
{
	set<int, MyCompare> s;
	s.insert(209);
	s.insert(203);
	s.insert(239);
	s.insert(239);

	for (set<int>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值