关联容器——map

顺序容器是通过元素在容器中的位置来顺序访问的,关联容器则不同,是通过键来存储和读取元素的。常用的顺序容器有一下几种:

map元素通过键值来存取元素

set键的集合

multimap同一个键出现多次的map

multiset同一个键出现多次的set

下面只介绍map


1、map

(1) map<k, v>中的键的类型必须定义"<"操作。

(2) map定义的类型

map<k, v>::key_type键的类型,为const类型

map<k, v>::mapped_type值的类型

map<k, v>::value_typepair类型,第一个元素为const map<k, v>::key_type, 

第二个为map<k, v>::mapped_type

(3) 访问——通过下标,副作用

	
	map<string, int> word_count;
	word_count["andy_jiang"];
这种方式会有副作用。当要访问的元素不存在时,将在map中会添加一个新的元素。

(4) 添加元素——下标,insert
使用下标的副作用,可以为容器添加元素。也可以直接使用insert插入元素。

	
	word_count.insert("andy lau");
注意:insert()有三版本,需要注意insert接受单个值的返回类型。insert(e),其中,e为value_type类型,包含一个指向e.first元素的map迭代器,以及一个bool类型值,表明是否插入成功。
例子——单词统计程序

	
	map<string, int> word_count;
	string word;
	while(cin >> word)
	{
		pair<map<string, int>::iterator, bool> ret = word_count.insert(make_pair(word, 1));
	
		if(!ret.second)
		{
			++ret.first->second;
		}
	}

上面的例子中,ret.second为bool类型。如果pair对插入成功,则word初始化为1。已存在map容器中,则插入失败,但是要对单词出现次数增1。

(5)删除元素——erase
m.erase(k),带有一个键参数的此版本,将返回删除的元素的个数,其他版本则返回void。在map容易中,返回值只能为1或者0。


2、map的上述几点是比较容易出错和混淆的。set、multimap、multiset的操作与map大致相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值