栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++关联容器操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++关联容器操作

一、关联容器迭代器

当解引用一个关联容器迭代器时,会得到一个类型为容器的value_type的值的引用

对于set而言,虽然set类型同时定义了iterator和const_iterator类型,但都只允许访问set中的元素

对于map而言,会得到一个pair类型,first是关键字,second是值

二、添加元素

1、insert和emplace操作

//c是关联容器
c.insert(v)          //v是value_type类型的对象
c.emplace(args)      //args用来构造一个value_type类型的对象

此函数对于map和set返回一个pair,first是一个迭代器,指向具有指定关键字的元素(新插入或已经存在),second是一个指示插入是否成功的bool值(若已有该值则是false);对于multimap和multiset返回一个指向新元素的迭代器

c.insert(p,v)        //类似insert(v),迭代器p指出从哪里开始搜索新元素应该存储的位置
c.emplace(p,args)

返回一个迭代器,指向具有给定关键字的元素 

c.insert(b,e)        //b,e是迭代器,表示一个c::value_type类型值的范围
c.insert(il)         //il代表花括号列表,花括号里是一个pair

返回void 

2、map添加pair元素有以下方法

// 向word_count插入word的4种方法
c.insert({word, 1});
c.insert(make_pair(word, 1));
c.insert(pair(word, 1));
c.insert(map::value_type(word, 1));
三、删除元素

1、两个版本的erase与之前相似,参数分别是一个迭代器或者一个迭代器对,来删除一个元素或者是一个范围内元素

2、关联容器提供一个额外的erase操作,他接受一个key_type参数,此版本删除所有匹配给定关键字的元素,返回实际删除的元素的数量(对于不重复关键字的容器,总是返回1或0)

四、map的下标操作

1、对于map和unordered_map容器(其他关联容器不支持)提供了下标运算符和at函数

2、map的下标运算符接受一个索引(即关键字),获取与此关键字相关联的值,与其他下标运算符不同的是,如果关键字不在map中,会为它创建一个元素并且插入到map中(一旦使用[]就会有),关联值将值进行值初始化

由于下标运算符可能插入一个新元素,我们只可以对值为非const的map使用下标操作

当我们只想知道一个元素是否存在在map中,并不想添加元素时就不能使用下标运算符

3、map的at成员带参数检查,如果关键字不再map中,会抛出out_of_range异常

五、访问元素

1、find函数用于确定是否在容器中,count函数确定存在个数

c.find(k)	//返回一个迭代器,指向第一个关键字为k的元素,若不存在返回尾后迭代器
c.count(k)	//返回关键字为k的元素的数量,对于不重复关键字的容器返回值为0或1

2、 查找函数

c.lower_bound(k)	//返回一个迭代器,指向第一个关键字不小于k的元素
c.upper_bound(k)	//返回一个迭代器,指向第一个关键字大于k的元素
c.equal_range(k)	
//返回成员为迭代器的pair,表示关键字等于k的元素的范围,若k不存在,pair的成员均等于c.end()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号