STL set

set

一、set简介

  • set 是 STL 中一种标准关联容器,封装了一种高效的平衡检索二叉树——红黑树。

  • set是用来存储同一数据类型的集合,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序

  • set 不支持插入重复的元素。若要插入重复元素可使用multiset,其用法与 set 几乎完全相同。

  • set中数元素的值不能直接被改变。

当出现需要去掉重复元素的情况,而且有可能因这些元素比较大或者类型不是int 型而不能直接开散列表时,就可以用set来保留元素本身而不考虑它的个数,并且set可以自动排序;

二、set的基础操作

1.set的定义

  • 头文件 #include
  • set数组定义与vector相同;
        set name;
        //typename 可以是任何类型  
        //如果是STL容器,那么定义时记得在>>符号之间加上空格;

        set a[100];

2.set的赋值

  • c++11中,set可以像数组一样赋初值,但是赋值完成后set中的元素是自动排好序的。
  • set没有尾部插入函数push_back(),元素的插入一般使用insert进行动态检索插入。
  • a.insert(x) :在集合中a中插入元素x,x 的类型必须与 set 的元素类型一致,如果插入的元素在 set中已存在则会忽略
	set a = {9, 8, 7, 5};
	a.insert(2);
	a.insert(7); 
	set::iterator it;
	for(it = a.begin(); it != a.end(); it++)
		cout << *it << endl;
	//Result: 2 5 7 8 9

3.set容器内元素的访问

  • set不能像数组的输出那样使用下标输出,只能通过迭代器访问;
	set::iterator it;
	for(it = a.begin(); it != a.end(); it++)
		cout << *it << endl;

4.Size()

  • Size()是set的成员函数,其返回值一个无符号整数,表示set中元素的个数。
	set a = {1, 2, 3};
	cout << a.size();
	//Result: 3

5.empty()

  • empty() 返回一个 bool 类型,表示 set 是否为空。

6.insert()

  • insert(x)可将x插入set容器中,并自动递增排序和去重;

7.find()

  • find(value)返回set中对应值为value的迭代器,如果找不到 x 就返回 end() 的 迭代器。
	set a = {1, 2, 3};
	if(a.find(4) == a.end())	cout << "no";
	else	cout << "yes";

8.count()

  • count() 用来查找set中某个某个键值出现的次数(0 或 1)。(不常用)

9.erase()

erase()有两种用法:删除单个元素,删除一个区间内的所有元素

  1. 删除单个元素 a.erase(value)
	set a = {1, 2, 3, 4, 5};
	a.erase(3);
	set::iterator it;
	for(it = a.begin(); it != a.end(); it++){
		cout << *it << " ";
	}
	//Result:1 2 4 5

   2.删除一个区间内的所有元素 a.erase(first,last)

	set a = {1, 2, 3, 4, 5};
	a.erase(a.find(3), a.end());
	set::iterator it;
	for(it = a.begin(); it != a.end(); it++)
		cout << *it << " ";
	//Result:1 2

10.clear()

  • clear()用于清空set中所有的元素;

11.begin(),end() 与 rbegin(),rend() 的区别

  • a.end():返回的迭代器指向最后一个元素的后一个位置;
  • a.begin():返回的迭代器指向 set 中的最小值;
  • a.rend():返回的迭代器指向第一个元素的前一个位置;
  • a.rbegin():返回的迭代器指向 set 中的最大值;

12.lower_bound()与upper_bound()

  • lower_bound(x) 返回 set 中大于等于 x 的最小元素的迭代器。
  • upper_bound(x) 返回 set 中大于 x 的最小元素的迭代器。 如果找不到也会返回 end() 的迭代器。

 

三、set的应用

(待补充);

 

 

你可能感兴趣的:(STL)