链接点开网页表白的网站怎么做的,什么网站发布建设标准,网站开发合同及报价单,海口网站建设优化欢迎来到我的Blog#xff0c;点击关注哦#x1f495;
前言: C的STL已经学习很大一部分了#xff0c;接下来介绍的是map set是c的是两种关联容器。 简单介绍
map set#xff1a;
两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器#xff0c;其中每个键…欢迎来到我的Blog点击关注哦
前言: C的STL已经学习很大一部分了接下来介绍的是map set是c的是两种关联容器。 简单介绍
map set
两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器其中每个键都是唯一的并且与一个值相关联。set则是一个元素集合其中的每个元素也是唯一的但它不存储与元素相关联的值。
setK模型
set使用介绍
set是标准模板库STL中的一种关联容器它存储的元素是唯一的并且按照特定的顺序默认是升序自动排序。
set的构造
函数声明功能介绍set (const Compare comp Compare(), const Allocator Allocator() );构造空的setset (InputIterator first, InputIterator last, const Compare comp Compare(), const Allocator Allocator() );用[first, last)区 间中的元素构造set set ( const set x);set的拷贝构造
set的迭代器
函数声明功能介绍iterator begin()返回set中起始位置元素的迭代器iterator end()返回set中最后一个元素后面的迭代器const_iterator cbegin() const返回set中起始位置元素的const迭代器const_iterator cend() const返回set中最后一个元素后面的const迭代器reverse_iterator rbegin()返回set第一个元素的反向迭代器即endreverse_iterator rend()返回set最后一个元素下一个位置的反向迭代器 即rbeginconst_reverse_iterator crbegin()const返回set第一个元素的反向const迭代器即cendconst_reverse_iterator crend() const返回set最后一个元素下一个位置的反向const迭 代器即crbegin
set的容量
函数声明功能介绍bool empty ( ) const检测set是否为空空返回false否则返回truesize_type size() const返回set中有效元素的个数
set的修改
函数声明功能介绍pair insert ( const value_type x )在set中插入元素x实际插入的是构成的 键值对如果插入成功返回该元素在set中的 位置true,如果插入失败说明x在set中已经 存在返回在set中的位置falsevoid erase ( iterator position )删除set中position位置上的元素size_type erase ( const key_type x )删除set中值为x的元素返回删除的元素的个数void erase ( iterator first, iterator last )删除set中[first, last)区间中的元素void swap ( set st );交换set中的元素void clear ( )将set中的元素清空iterator find ( const key_type x ) const返回set中值为x的元素的位置size_type count ( const key_type x ) const返回set中值为x的元素的个数
multiset
它允许存储具有相同值的元素并且这些元素会根据特定的排序准则自动排序。与 set 容器不同multiset 允许重复的元素值。
multiset的操作大致是一样的唯一的额区别就是multiset允许有重复的元素。针对set以下接口大致是留给multiset
函数声明功能介绍lower_bound返回比这个大于等于这个值的迭代器upper_bound返回大于这个值的迭代器equal_rangepairiterator,iterator equal_range (const value_type val) const返回这个值的区间满足左闭又开。
pairiterator,iterator这个返回值是键对值。
mapKV模型
map是一种关联容器它存储元素作为键值对key-value pairs其中每个键都是唯一的。
map的使用介绍
map的迭代器
函数声明功能介绍begin()和end()begin:首元素的位置end最后一个元素的下一个位置cbegin()和cend()与begin和end意义相同但cbegin和cend所指向的元素不能修改rbegin()和rend()反向迭代器rbegin在end位置rend在begin位置其 和–操作与begin和end操作移动相反crbegin()和crend()与rbegin和rend位置相同操作相同但crbegin和crend所 指向的元素不能修改
map的容量与元素访问
函数声明功能简介bool empty ( ) const检测map中的元素是否为空是返回 true否则返回falsesize_type size() const返回map中有效元素的个数mapped_type operator[] (const key_type k)返回去key对应的value
值得注意的是[]由于map存储的值的键值对.
注意
在元素访问时有一个与operator[]类似的操作at()(该函数不常用)函数都是通过 key找到与key对应的value然后返回其引用不同的是当key不存在时operator[]用默认 value与key构造键值对然后插入返回该默认valueat()函数直接抛异常。 代码解析
pairiterator, bool ret insert(key, V());
return ret.first-second;如果key存在则返回这等于key的迭代器。如果key不存在在则返回新插入节点的迭代器。
pair
std::pair 是 C 标准模板库STL中的一个模板结构用于存储一对值。 在map中是如何赋值
void TestMap()
{mapstring, string m;string s1(苹果);string s2(apple);m.insert(pairstring, string(s1, s2));//C98pair构造m.insert(make_pair(桃子, peach));//C11 多参数的构造函数隐式类型转换m.insert({ 香蕉,banana });for (auto e : m){cout e.first : e.second endl;}
}map中元素的修改
函数声明功能简介pair insert ( const value_type x )在map中插入键值对x注意x是一个键值对返回值也是键值对iterator代表新插入 元素的位置bool代表释放插入成功void erase ( iterator position )删除position位置上的元素size_type erase ( const key_type x )删除键值为x的元素void erase ( iterator first, iterator last )删除[first, last)区间中的元素void swap ( map mp )交换两个map中的元素void clear ( )将map中的元素清空iterator find ( const key_type x )在map中插入key为x的元素找到返回该元素的位置的迭代器否则返回endconst_iterator find ( const key_type x ) const在map中插入key为x的元素找到返回该元素的位置的const迭代器否则返回cendsize_type count ( const key_type x ) const返回key为x的键值在map中的个数注意 map中key是唯一的因此该函数的返回值 要么为0要么为1因此也可以用该函数来 检测一个key是否在map中
multimap
multimap是C标准模板库STL中的一种关联容器它存储键值对并且允许一个键对应多个值。这与map容器不同后者对于每个键只存储一个值。
函数声明功能介绍lower_bound返回比这个大于等于这个值的迭代器upper_bound返回大于这个值的迭代器equal_rangepairiterator,iterator equal_range (const value_type val) const 返回这个值的区间满足左闭又开。
map和set对比
综上所述map和set很相似很多接口都一样区别如下
对比维度mapset存储元素键值对单个值唯一性键唯一元素唯一访问方式通过键访问值通过迭代器遍历修改能力可以通过键修改值元素不可修改默认排序键升序值升序底层结构红黑树红黑树 | | 访问方式 | 通过键访问值 | 通过迭代器遍历 | | 修改能力 | 可以通过键修改值 | 元素不可修改 | | 默认排序 | 键升序 | 值升序 | | 底层结构 | 红黑树 | 红黑树 |