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;}


例子:”单词转换“  使用map对象

单词转换文本:

'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


     

0 0