1.使用map对象,需要包含头文件 #include <map>
使用pair对象,需要包含头文件#include <utility>
2.map对象的类型
map<string,int> word_count;//empty map from string to int
value_type:pair(const string,int)即pair(const key_type,mapped_type)
key_type:string
mapped_type:int
3.map对象迭代器的解引用
对map迭代器进行解引用将产生一个pair类型的对象
4.map对象的下标类型
下标类型key_type必须支持'<'操作,因此list的对象和迭代器不能作为key
对下标类型的操作会返回map容器中定义的mapped_type类型
5.给map添加元素
map对象能够使用下标访问,如何下标不存在,则会添加一个键值对,它的键就是该下标
注意:vector也能使用下标访问,但是如果下标不存在,则会出现访问错误!!!!
6.关于map::insert的使用(使用insert可以避免下标操作带来的副作用:不必要的初始化)
A. m.insert(e)
返回类型:pair< map<key_type,mapped_type>::iterator,bool>
1.插入单个元素的insert版本使用pair类型的参数,返回一个pair类型的对象,包含一个指向键为e.first的元素的map迭代器以及一个bool
类型 的对象,表示是否插入了该元素
例子:
map<string,int> word_count;
word_coutn.insert(map<stirng,int>::value_type("Anna",1));
注意:map<stirng,int>::value_type("Anna,1")是新创建一个pair对象,并直接将其插入到map中
可以简化上述实参
map<stirng,int>::value_type("Anna,1")------>make_pair("Anna",1)
或者使用tepedef:typedef map<string,int>::value_type valType;
word_count.inset(make_pair("Anna",1));或者word_count.insert(valType("Anna",1));
B.m.insert(begin,end)
返回类型:void
1.begin,end是标记元素范围的迭代器,但是元素必须是m.value_type类型的键值对;
2.对于该范围内的所有元素,如果他的键在m中不存在,则将该键及其关联插入到m中;
C.m.insert(iterator,e)
返回类型:返回一个迭代器,指向m中具有给定键的元素
1.e是一个用在m上得value_tpye类型的值;
2.如果e.first不在m中,则创建新元素,并以iterator为起点搜索新元素存储的位置
7.谨记value_tpye是pair<const K,V>类型的同义词
8.使用count检查map对象中某键是否存在
对于map对象,count成员只能返回0或者1,因为map中的键是唯一的,所以count可以有效的表明一个键是否存在;
m.count(k) 返回m中k的出现次数
9.读取元素而又不插入改元素
m.find(k)
如果m容器中存在按K的索引的元素,则返回指向改元素的迭代器;否则返回超出末端的迭代器;
10.从map中删除元素
1.m.erase(k):删除m中键为K的元素
返回:size_type类型,表示删除的元素个数;对于map容器,该值必然是0或者1;0表示删除的元素不存在;
2.m.erase(iterator):从m中删除迭代器iterator所指的元素
返回:void类型
注意:iterator必须指向m中确实存在的元素,且不能等于m.end()
3.m.erase(begin,end):删除迭代器begin,end之间的一段元素
返回:void类型
http://share7789.blog.163.com/blog/static/213280152201331112347432/
关联容器(Associative containers) 支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map set。map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据。set 仅包含一个键,并有效地支持关于某个键是否存在的查询。
map <string, int> word_count; // empty map
// insert default initialzed element with key Anna; then assign 1
to its value
word_count["Anna"] = 1;
// count number of times each word occurs in the input
map<string, int> word_count; // empty map from string to int
string word;
while (cin >> word)
++word_count[word];
//编写程序统计并输出所读入的单词出现的次数。
#include"head.h" void main() { map< string, float > map_score; /*使用下标访问 map 对象 **如果在map中找不到这个键值,则插入这个新键 **如果在map中找到了这个键值,则只更新键所对应的值 */ //map_score["kity"] = 23.43f; //map_score["kity"] = 23.11f; //map_score["andy"] = 23.22f; //cout<< map_score["andy"] << endl; //下标操作返回左值 string word; //输入单词 while( cin >> word ) { ++map_score[word]; } //map 迭代器进行解引用将产生 pair 类型的对象 map< string, float >::const_iterator map_iter = map_score.begin(); for( ; map_iter != map_score.end(); map_iter++ ) { cout << map_iter->first << ":" << map_iter->second << endl; } }