1、set简介
set是一种关联式容器,包含的key值唯一,所有元素都会在插入时自动被排序,其存储结构为红黑树。set只能通过迭代器(iterator)访问。
set和multiset的区别:
(1)set不允许容器中有重复的元素;
(2)multiset允许容器中有重复的元素
2、set库函数
2.1、构造函数
(1)默认构造函数:set<T> st;
(2)拷贝构造函数:set(const set &st);
2.2、赋值函数
(1)重载等号运算符:set &operator =(const set &st)
2.3、判断函数
(1)返回容器中的元素数目: size();
(2)判断容器是否为空: empty();
(3)交换两个容器: swap();
2.4、增删改查
(1)在容器中插入元素:insert(elem);
  
 (2)清除所有元素:clear();
  
 (3)删除pos所指元素,返回下一个元素的迭代器:earse();
  
 (4)删除区间[beg,end)的所有元素,返回下一个元素的迭代器:erase(beg,end);
  
 (5)删除指定元素:earse(elem);
(6)查找元素是否存在,如果存在,返回该元素的迭代器,如果不存在返回end():find();
(7)统计key的元素个数:count(key);
3、multiset
(1)快速查找区间:lower_bound();
(2)快速查找区间:upper_bound();
4、multiset与set的相似点与区别
相似点:
(1)两种容器内部元素默认都是按照升序排列的。
(2)都不支持随机访问,元素只能通过迭代器依次访问。
(3)由于内部实现采用了二叉搜索树(红黑树),在元素查找上具有较高的效率。
不同点:
 (1)multiset容器允许出现重复的元素,而set容器中不允许出现重复元素。换句话说,set容器中的元素是唯一的。
(2)在插入元素时,set容器会检查元素是否存在,如果相同则插入无效,而multiset容器插入元素时则不会检查元素是否已经存在,可以插入重复元素。
(3)在删除元素时,set容器只会删除指定值的第一个元素,而multiset容器则会删除所有符合条件的元素。
5、示例
#include <set>
#include <iostream>
using namespace std;
void print_set(set<int> v)
{
	cout << "set: ";
	for (auto it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
int main()
{
	//默认构造:
	set<int> d1;
	d1.insert(24);
	d1.insert(24);
	d1.insert(243);
	d1.insert(73);
	d1.insert(63);
	cout << "默认构造结果为:";
	print_set(d1);
	//拷贝函数
	set<int> d2(d1);
	cout << "拷贝构造结果为:";
	print_set(d2);
	//重载等号运算符
	set<int> d3 = d1;
	cout << "重载等号运算符结果为:";
	print_set(d3);
	//交换set
    set<int> d4;
	d4.swap(d1);
	print_set(d1);
	print_set(d4);
	d1.swap(d4);
    //插入
	d1.insert(100);
	cout << "插入元素之后:" << endl;
	print_set(d1);
	d1.erase(100);
	cout << "删除指定元素后" << endl;
	print_set(d1);
	d1.erase(d1.begin());
	cout << "删除指定头位置元素后" << endl;
	print_set(d1);
	d1.erase(d1.begin(), d1.end());
	cout << "删除指定区间元素后" << endl;
	print_set(d1);
	cout << "重新赋值后结果为:";
	d1.insert(24);
	d1.insert(24);
	d1.insert(243);
	d1.insert(73);
	d1.insert(63);
	print_set(d1);
	d1.clear();
	cout << "清空容器后结果为:";
	print_set(d1);
	// 
	set<int>::iterator pos = d2.find(73);
	cout << *pos << endl;
	cout << "24元素的个数为: " << d2.count(24);
	return 0;
}
结果为:


















![[c++] c++ 中的顺序(构造,析构,初始化列表,继承)](https://img-blog.csdnimg.cn/direct/839bf38b9a014664b66372bed6ef34a6.png)

