map
作为
STL
中一个类似于
HASH
的容器,内部以红黑树实现。
map就是从键(key)到值(value)的映射。
常见操作:
一.构造
map<int,int>hash;
第一个类型为原类型,而第二个类型为映射之后的类型。
二.插入
map<string,int>hash;
hash["hello"]=1;
hash.insert(pair<string,int>("hi",2));
hash.insert(map<string,int>::value_type("april",3));
当然第一种插入方式最简单最常用。
三.查找
1.[]运算符
在stl中已经重载了运算符[]。在一定程度上,map也称为映射数组。
map<int,int>hash;
int pos=hash[1];
if(pos==0)//没有找到 即不存在键为1的元素
puts("-1");
else printf("%d\n",pos);//找到了则返回元素位置
2.count()函数与find()函数
map<string,int>name;
int main()
{
name["Mike"]=1 ,name["Sam"]=2 ,name["Eva"]=3;
if(name.find("Mike")!=name.end())
puts("Find");
if(name.count("Eva"))
puts("Find");
return 0;
}
在这个例子中发现find()可以查找到元素的位置,而count()只能返回元素的个数。
四.删除
1.clear()
clear()只能清空整个map,多用于多组测试数据的代码。O__O”…
2.erase()
map<string,int>name;
int main()
{
name["Mike"]=1 ,name["Sam"]=2 ,name["Eva"]=3;
name.erase("Mike");//通过key来删除元素
name.erase(name.find("Sam"));//通过一个条目对象来删除元素
name.erase(name.begin(),name.end());//删除某一个范围的元素
return 0;
}
其中,clear()=name.erase(name.begin(),name.end())
五.遍历
这就需要使用迭代器了。
map<string,int>name;
for(map<string,int>::iterator p=name.begin();p!=name.end();++p)
cout<<p->frist<<' '<<p->second<<endl ;
其中,p->frist为键即第一个类型,p->second为值即第二个类型。
六.常用函数
begin() 返回map的初始地址
end() 返回map的结束地址
count(a) 返回元素a的个数
find(a) 返回元素a的地址
empty() 判断map是否为空 若为空返回true
size() 返回map的元素个数
swap() 交换两个map 注:不能交换map中两个元素的值