按理说嘛map英文里意思是叫地图.但我们在这里叫做字典.因为数据结构中的map的思想很想我们平时用的字典.
我们查字典找某个字的意思时先是找到它的页数,然后翻到相应的页数找到字的解释.
而map保存很多的键值对,一个是键(相当于是字典的页数),另一个是值(相当于页数对应的内容).map是通过红黑树实现的
下面来瞧瞧map具体咋用.
#include <map>
#include <string>
using namespace std;
1.map插入数据.
插入数据的方式有三种.由于map中的键必须是唯一的,所以插入时不能出现重复的键.
map<int,string> mapMe;
//方法1,通过pair
mapMe.insert( pair<int,string>(1, "arwen") );
//方法2,通过value_type
mapMe.insert( map<int,string>::value_type(2, "weiwen") );
//方法3,以数组形式,但注意的是这里的数组形式下标是从1开始而不是0
mapMe[3] = "weiwenhp";
mapMe.insert( pair<int,string>(3,"new") ); //不会成功插入,键值3已经存在,
mapMe.insert( map<int,string>::value_type(3,"new") );//不会成功插入,键值3已经存在,
mapMe[3] = "newName"; //这里newName会覆盖掉weiwenhp的值
map<int,string>::iterator it;
it = mapMe.begin();
while( it != mapMe.end())
{
cout<<it->first<< " " <<it->second<<endl;
it++;
}
判断插入是否成功.
我们上面知道通过insert时如果有重复值时会插入失败.但我们怎么知道insert执行到底是成功了还是失败了呢.
我们可以这样
pair<map<int,string>::iterator,bool> insert_pair;
insert_pair = mapMe.insert( pair<int,string>(3,"arwen") );
bool ret = insert_pair.second; //如果成功则是true,失败则是false;
2.map查找数据
我们用字典做的最多的事是查找信息了,当然了少数变态的人是拿着字典去背诵.那数据结构中的map自然也会常常查找嘛.
最常用的是用find函数
map<int,string>:iterator it;
it = mapMe.find(2);
if(it != mapMe.end() )
cout<< it->second;
当然如果不需要返回查找到的信息,只需要判断下是否存在该键.可这样
bool ret = mapMe.cout(2); //如果有键2,则返回1,否则返回0
3.map删除元素
删除元素有两种方法,一是通过迭代器删除,一个是通过键直接删除
int ret; //删除成功返回1,否则返回0
ret = mapMe.erase(2); //直接删除键为2的元素
it = mapMe.find(2); //先查找元素返回迭代器
ret = mapMe.erase(it);
mapMe.erase( mapMe.begin() , mapMe.end() ); //删除一个区间内的元素
4.其他方法
int num = mapMe.size(); //元素个数
mapMe.clear(); //清空map
bool ret = mapMe.empty(); //map是否为空