在竞赛中经常涉及到一些以字符串为键值的操作,此情况下用map映射比较好.打一个最简单的比如,十个小孩互相给对方糖,问经过若干次操作之后问他们每一个人手头里有多少糖。其中一个操作,小红给小明小刚分别五块糖。如果采取普通的数据结构,比如struct{string name,int candy};那么还得经过一次循环查找谁叫小明,找到小明之后,在对其相应的糖块数进行修改。当然如果如果用二分查找的话,肯定会效率高一些,但是对于一个小小的且经常用的操作就写一大堆多余代码,肯定会增加程序的易错性。我觉得STL里面的set内部的实现应该是二分的,封装的不错,很容易操作,我们直接用,何乐而不为。

#include<map>

map<string,int>arr;

插入操作:

arr.insert(pair<string,int>(xiaohong,100));

读取或其他使用操作

cout<<arr[xiaohong]<<endl;

迭代器遍历:

map<string,int>::iterator iter;

for(iter=arr.begin();iter!=arr.end();iter++){

  cout<<iter->first<<" "<<iter->second<<endl;

}

还有一种插入方式比较方便,就是直接用数组的方式,只不过[]里面是键值

如:arr["xiaohong"]=100;就自动在arr里面加了一个键值对("xiaohong",100)

    map<string,int>arr;
arr["liuqian"]=1;
arr["liuwei"]=2;
arr["aa"]=3;
arr["bb"]=4;
map<string,int>::iterator it;
for(it=arr.begin();it!=arr.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
cout<<arr["liuqian"]<<endl;
cout<<arr["liuwei"]<<endl;

在这个迭代操作中可以,看到,再插入的时候STL模板自动对插入 键值对 按照键值拍了顺序,这样的在查找的时候就可以通过二分查找提高效率。

反向迭代操作:

map<string ,int>::reverse_iterator iter;

for(iter=arr.rbegin();iter!=arr.rend();iter++){

cout<<iter->first<<" "<<iter->second<<endl;

}

查找等操作如何以后用到参考下文:

http://www.kuqin.com/cpluspluslib/20071231/3265.html

posted on 2011-10-17 16:52  geeker  阅读(398)  评论(0编辑  收藏  举报