C++基础知识 - Set和multiset容器

本文详细介绍了C++中的set和multiset容器,包括它们的概念、特点、数据结构(红黑树)、操作(插入、删除、查找)及与迭代器的使用。set确保元素唯一并按排序顺序存储,不允许直接存取和修改元素;multiset允许元素重复,其余特性与set相似。
摘要由CSDN通过智能技术生成

set/multiset容器概念

  • set和multiset是一个集合容器,其中set所包含的元素是唯一的,集合中的元素按一定的顺序排列。
  • set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。在n个数中查找目标数的效率是 log2 n
  • 红黑树定义 — 是每个节点都带有颜色属性(颜色为红色或黑色)的自平衡二叉查找树,满足下列性质:
    1)节点是红色或黑色;
    2)根节点是黑色;
    3)所有叶子节点都是黑色节点(NULL);
    4)每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
    5)从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
    在这里插入图片描述

Set 和 multiset 特点

  • set中元素插入过程是按排序规则插入,所以不能指定插入位置。
  • set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。
  • multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;而multiset中同一值可以出现多次。
  • 不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原有的元素,再插入新的元素
  • 头文件 #include < set>
	//set不支持插入相同元素
	set<int> s1;
	for (int i = 0; i < 5; i++) {
   
		s1.insert(100 - i);
	}
	s1.insert(99);	//插入相同元素
	for (auto it = s1.begin(); it != s1.end(); it++) {
   
		cout << *it << endl;	//输出 96 97 98 99 100
	}

	//multiset支持插入多个相同元素
	multiset<int> m1;
	for (int i = 0; i < 5; i++) {
   
		m1.insert(100 - i);
	}
	m1.insert(99);	//插入相同元素
	for (auto it = m1.begin(); it != m1.end(); it++) {
   
		cout << *it << endl;	//输出 96 97 98 99 99 100
	}

 

set/multiset对象的默认构造


set<int> setInt;              		//一个存放int的set容器。
set<float> setFloat;         		//一个存放float的set容器。
set<string> setString;         		//一个存放string的set容器。
multiset<int> mulsetInt;            //一个存放int的multi set容器。
multiset<float> multisetFloat;      //一个存放float的multi set容器。
multiset<string> multisetString;    //一个存放string的multi set容器。

 

Set/multiset 对象的带参构造函数

set
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值