C++---set/multiset用法介绍

set

c++ STL标准模板库提供的一种关联式容器,set中元素在底层也存放的是特殊的键值对,但是与map键值对不同的是,set底层的键值对是

特征
  1. 底层是红黑树结构,所以对其遍历可以得到一个有序的序列。
  2. 底层也存放的是键值对,但是实际上存放的是类型的键值对。
  3. set插入元素时,只需要插入value即可,不需要构造键值对。
  4. set元素不能重复,同时遍历有是有序的,所以常常有其进行去重排序。
  5. 在set中查找元素的时间复杂度为 log2^n。
  6. set不允许元素修改。

set接口

C++---set/multiset用法介绍_第1张图片构造函数

接口 接口说明
set() 构造空set
set[first,last) 区间构造set
set(const set& s) 拷贝构造函数

迭代器

接口 接口说明
begin 返回set中起始位置元素的地址
end 返回set最后一个元素后面的地址
rbegin 反向迭代,返回set最后一个元素后面地址
rend 反向迭代,返回set起始位置元素的地址

容量操作

接口 接口说明
empty 检测是否为空
size 返回有效元素的个数

修改操作

接口 接口说明
insert(value) 插入value
insert(it,value) 在it在位置插入value,但是最后不一定在该位置
insert[first,last) 区间插入
erase 删除某一位置上的元素
erase[first,last) 删除set[first,last)区间的元素
clear 删除set
swap 交换两个set值
find 查找元素,返回查找元素的位置
count 返回某一元素的个数,0/1
int main()
{
	//构造一个空set
	set<int> myset; 
	
	//区间构造
	int array[] = { 10, 20, 30, 40, 50 };
	set<int> myset1(array, array + 5);
	set<int> myset2(myset1.begin(), myset1.end());

	//拷贝构造
	set<int> myset3(myset1);

	for (set<int>::iterator it = myset3.begin(); it != myset3.end(); ++it)
		cout << *it << " ";
	cout << endl;
	

	for (set<int>::reverse_iterator it = myset2.rbegin(); it != myset2.rend(); ++it)
		cout << *it << " ";
	cout << endl;

	//插入操作
	myset.insert(10);
	myset.insert(myset1.begin(), myset1.end());
	myset.insert(myset.begin(),1); //在第一个元素前面插入1

	//C++11提供的范围for函数
	for (auto it : myset)
		cout << it << " ";
	cout << endl;

	//交换两个set
	myset.swap(myset1);
	myset1.erase(myset1.find(50));
	for (auto it : myset1)
		cout << it << " ";
	cout << endl;
	
	//存在该元素返回1,否则返回0,主要是用于判断set中是否含有该元素
	cout<<myset.count(30);
	system("pause");
	return 0;
}

mutilset

基本接口与set类似,但是multiset支持key重复,也就是说multiset中是有重复元素的。

特征
  • mutilmap的key是可以重复的。
  • multimap元素是按照小于进行排列。

基本的接口与set相类似,头文件和set头文件相同

你可能感兴趣的:(C++---set/multiset用法介绍)