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.> s1;升序排序(不输就默认)

set> 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两个值的类型可以不一样

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

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

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

类似与这样使用

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

map容器

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

map

multiple

如map mapA;

第一种插入方式

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

第二种插入元素,返回pair

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

直接插pair

第三种通过value_type

map.insert(map)::value_type(1,"小李");

第四种

通过数组的方式插入

map[3]="小刘"

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

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

第一种使用[]

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

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

你可能感兴趣的:(数据结构)