STL关联式容器set,multiset,pair,map

set容器是一个集合容器。包含元素是唯一的。集合元素按照一点顺序排列,元素插入过程是顺序插入,所有不能插入指定位置。

set采用红黑树变体的数据结构实现。红黑树属于平衡二叉树。再插入和删除上比vector快。

set不能直接存取元素(不能用at.()和[])

multiset和set大致相同,但是set支持唯一键值,每个元素只能出现一遍。而multiset可以出现多次。(会自动去重)

不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值只能先删除后插入新的元素值

构造与其他容器没有什么区别。

set.insert(elem)只用插入元素就可以了会自动排序

同样有

set.begin

set.end

set.rbegin

set.rend

这些常见的迭代器

set的内部的默认排序是升序排列的

set.swap();

删除如下

set.clear()

set.erase(pos)

set.erase(beg,end)

set.erase(elem)如果没有就会返回0,有就会删除并且返回1

set不支持反向迭代器对元素进行删除

通过迭代器删除以后,迭代器会重新指向set容器中的第一个元素

set容器的元素排序

set.<int,less<int>> s1;升序排序(不输就默认)

set<int,greater<int>> s2;降序排序

less<>和geater<>都是对象

可以通过自己写对象来更改排序方式

接下来是set的查找

set.find(elem)返回指向elem的迭代器

set.count(elem)查找数值为elem的迭代器,set只有0或1.multiset可能会更多

set.lower_bound(elem)找到第一个>=elem元素的迭代器器

set.higher_bound(elem)找到第一个>elem元素的迭代器

set.equal_range(elem)

找一个与elem相等的上下限的两个迭代器(上闭下开)

例如1,3,5,7,9

elem=5,那么就会返回5和7元素的迭代器

而返回的则用pair进行存放

pair可以将2个值视为一个单元

pair<t1,t1>两个值的类型可以不一样

pair.first是第一个成员变量的类型

pair.second是第二个成员变量的类型

pair<set<int>::iterator,set<int>::iterator>=s1.equal_range(elem)

类似与这样使用

如果elem不存在,则根据编译器的不同会出现不同的结果

map容器

map不允许容器中有重复的key值元素 multimap允许容器中有重复的key值元素

map<t1,t2>

multiple<t1,t2>

如map<int,char> mapA;

第一种插入方式

map.insert(pair<int,string>(3,"小张");)

第二种插入元素,返回pair

map.insert(pair(3,"小张"))

直接插pair

第三种通过value_type

map.insert(map<int,string>)::value_type(1,"小李");

第四种

通过数组的方式插入

map[3]="小刘"

但是这种会先去删除已有的对象。而前面的方法不会。

map容器对象获取键对应的值

第一种使用[]

第二种使用find()Hanshu1.成功返回对应的迭代器,失败返回end()的迭代器

第三章使用at()函数,如果键值不存在就会抛出out_of_range异常

相关推荐
橙淮7 小时前
二叉树核心概念与Java实现详解
数据结构·算法
困意少年10 小时前
队列:先进先出为什么特别适合“流程推进”这类问题
数据结构
2501_9219608511 小时前
协同本体论 V4.2+:离散关系拓扑涌现连续时空几何的数值验证
数据结构·人工智能·重构
橙淮12 小时前
Java数组与链表:特性对比与应用场景
数据结构·算法
故事和你9113 小时前
洛谷-【图论2-1】树4
开发语言·数据结构·c++·算法·动态规划·图论
故事和你9113 小时前
洛谷-【图论2-1】树1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
普马萨特14 小时前
地理空间索引技术选型指南:GeoHash, Google S2 与 Uber H3
数据结构
谙弆悕博士15 小时前
【附C源码】二叉搜索树的C语言实现
c语言·开发语言·数据结构·算法·二叉树·项目实战·数据结构与算法
宵时待雨15 小时前
回溯算法专题2:二叉树中的深搜
开发语言·数据结构·c++·笔记·算法·深度优先
澈20716 小时前
平衡二叉树:AVL与红黑树终极对比
数据结构·c++·红黑树