【C++】STL 容器 - set 集合容器 ① ( set 集合容器简介 | set 集合容器操作的时间复杂度 | set 集合容器常用操作 )






一、set 集合容器



1、set 集合容器简介


C++ 语言中的 STL 容器中的 set 容器 , 是 " 集合容器 " ,

  • 容器中的 每个元素 是 " 唯一的 " ,
  • 并且 集合容器 中的元素 是按照一定的顺序进行排列的 ;

向 set 集合容器 中 插入元素时 , 都会先验证集合中是否已经存在该元素 , 然后再根据排序规则 , 插入到指定的位置 ;

set 集合容器 不支持 将 元素插入到指定位置 ;

set 集合容器 也不支持 使用 下标位置 直接访问元素 ;


使用 set 集合容器前 , 需要 导入 set 头文件 ;

#include "set"

与 set 容器类似的 容器还有 multiset 容器 , 唯一区别是 set 中的元素只能出现一次 , multiset 中的元素可以出现多次 ;


set 集合容器 中的元素 不能直接修改 , 只能 先删除 原来的元素 , 然后插入新元素 ;


2、set 集合容器操作的时间复杂度


set 集合容器 的 底层采用 " 红黑树 " 数据结构 实现 , 红黑树 是一种 " 平衡二叉树 " , 其特点是 插入 / 删除 操作 , 比线性表要快 ;


set 集合容器 操作的 时间复杂度 就是 红黑树操作 的时间复杂度 ;

红黑树是一种自平衡的二叉搜索树 , 其插入和删除操作的时间复杂度可以依赖于特定的实现和操作的类型 ;

红黑树 的 插入 / 删除 操作 , 分两种情况 ,

  • 在平均情况下 : 红黑树的 插入 / 删除 操作 的 时间复杂度是 O(log n) ;
  • 在最坏情况下 : 红黑树的 插入 / 删除 操作 的 时间复杂度是 O(n) , 需要遍历所有的节点 , 出现的概率较小 ;

上述时间复杂度中的 n 指的是 红黑树中 的 元素节点个数 ;


与 红黑树 进行对比 , 线性表 中 如果进行 插入 / 删除 操作 , 其时间复杂度是 O(n) , 显然 红黑树 / set 集合容器 的 插入 / 删除 操作 性能更高 ;


3、set 集合容器常用操作


set 集合容器常用操作 :

  • 插入元素 : 调用 insert 函数 可以向 set 集合容器中插入元素 , 如果元素已存在 , 则不会执行任何操作 ;
  • 删除元素 : 调用 erase 函数 可以删除 set 集合容器中的指定元素 , 如果元素不存在 , 则不会执行任何操作 ;
  • 遍历容器 : 使用 set<T>::iterator 迭代器 可遍历 set 集合容器 ;
  • 查找元素 : 调用 find 函数 来查找元素是否存在于 set 中 ; 如果元素存在 , 该方法返回指向该元素的迭代器 ; 如果元素不存在 , 则返回指向 set 尾部的迭代器 ;




二、代码示例 - set 集合容器



1、代码示例


#include "iostream"
using namespace std;
#include "set"

int main() {
    
    

	// set 集合容器
	set<int> se;

	// 向容器中插入元素
	se.insert(3);
	se.insert(1);
	se.insert(2);

	// 遍历 set 集合容器
	for (set<int>::iterator it = se.begin(); it != se.end(); it++)
	{
    
    
		cout << *it << " ";
	}
	// 回车换行
	cout << endl;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
};

2、执行结果


执行结果 :

1 2 3
Press any key to continue . . .

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/han1202012/article/details/135235557