map
来源:互联网 发布:软件代理商协议 编辑:程序博客网 时间:2024/06/01 09:32
1、使用下标访问map元素:
map<string, int> word_map;
word_map["anna"] = 1;
注意:如果该键值不在容器中,那么下标操作会插入一个具有该键的新元素。如:“anna"不在容器word_map中,则上面操作步骤:
(1)创建一个新的键-值对(键为string类型的对象,保存为anna,而他的值则采用值初始化,初始化为0。
(2)然后把新的键-值对插入到容器word_map中,
(3)读取新插入的元素,将他的值赋为1。
使用下标访问map返回左值,是特定键所关联的值。
2、map::insert 函数的使用:
map的insert函数参数是 :键-值 pair类型的参数。
m.insert(e) e是一个用在 m上的value_type类型的值
m.insert(beg,end); 迭代器所指的类型是value_type类型
m.insert(iter, e)
例子:word_map.insert(map<string, int>::value_type("anna",1));
map::insert 函数的返回值:
带有一个键-值pair形参的insert版本将返回一个值:包含一个迭代器和一个bool值的pair对象。
例子:pair< map<string, int>::iterator, bool > ret = word_map.insert(make_pair("anna",1));
如果该键已在容器中,则其关联的值保持不变,返回的bool为false,迭代器指向给定键的元素。
如果该键不在容器中,则插入新的元素,返回的bool为true,迭代器指向给定键的元素。
3、查找并读取map中的元素
(1)使用下标也可以,但是下标存在一个很危险的副作用:如果该键不在map容器中,那么下标操作会插入一个具有该键的新元素:int occurs = word_map["anna"];
(2)使用count检查map对象中某键是否存在。
如:int occurs = word_map.count("anna"); 返回0不存在,1存在(因为map容器只允许一个键对应一个实例,但是对于multimap,count返回值有更多用途)
(3)find函数:返回指向元素的迭代器,如果元素不存在,返回end迭代器。
如:map<string,int>::iterator it = word_map.find("anna");
if(it != word_map.end())
occours = it->second;
4、map对象中删除元素:erase函数
例子:统计读入单词出现的次数
例子1:
void statics(){map<string,int>word_count;string word;while(cin>>word){if(word[0] == '*')break;++word_count[word];}map<string,int>::iterator iter = word_count.begin();for(; iter != word_count.end(); ++iter){cout<< iter->first<<":"<<iter->second<<endl;}}
例子2:void statics1(){map<string,int>word_count;string word;while(cin>>word){if(word[0] == '*')break;pair<map<string,int>::iterator, bool> ret = word_count.insert(std::make_pair(word, 1));if(!ret.second)//如果容器中存在了++ret.first->second;}map<string, int>::iterator iter = word_count.begin();for(; iter != word_count.end(); ++iter)cout<<iter->first<<":"<<iter->second<<endl;}
单词转换文本:
'em them
cuz beause
gratz grateful
i I
nah no
pos supposed
sez said
tanx thanks
wuz was
要转换的文本是:
nah i sez tanx cuz i wuz pos to
not cuz i wuz gratz
产生的输出:
no I said thanks beause I was supposed to
not beause I was grateful
void wordtrans(){map<string, string>trans_map;string key, value;ifstream map_file("code.txt");//打开文件while(map_file>>key>>value) //读入字符,好像是自动过滤空格,换行符之类trans_map.insert(make_pair(key, value));ifstream input("trans.txt");string line;while(getline(input,line))//读入一行{istringstream st(line);//字符串流string word;bool firstword = true;//第一个字符不输出空格while(st>>word){map<string, string>::const_iterator map_it = trans_map.find(word);if(map_it != trans_map.end())word = map_it->second;if(firstword)firstword = false;elsecout<<" ";cout<<word;}cout<<endl;}}
友好链接:http://www.cnblogs.com/skynet/archive/2010/06/18/1760518.html
- map
- MAP
- map
- MAP
- map
- map
- map
- Map
- Map
- Map
- map
- map
- Map
- .map
- map
- MAP
- map
- Map
- 以 vim 的方式来使用 chrome 浏览器(利用 vimium 插件)
- usaco1.1.3的题解
- C++按行读取文本文件,并将每行字符串拆分为double value的坐标值
- Android之TextView、EditText控件显示表情图片
- java中虚引用PhantomReference与弱引用WeakReference(软引用SoftReference)的差别
- map
- 简单文章发布系统(6)
- Android ZXing 二维码、条形码扫描介绍
- three.js 源码注释(十八)Math/Triangle.js
- 走,带上妹子,咱一起去阿里!
- Android动画之translate(位移动画)
- CodeForces 486E LIS of Sequence
- 【大话一角】——六兄弟
- Android编程之还原JD-GUI反编译后代码