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<string, size_t>(word, 1));
c.insert(map<string, size_t>::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()

3、对于不支持随机访问的迭代器如set、map这种的迭代器,是不支持迭代器相减的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值