map
map是键值c++对,类似于数组的下标对应一个值,是一个映射关系,一对一的存储容器
map可以将任何基本类型(包括STL容器),映射到任何基本类型(包括STL容器)
1.map是一个STL的关联容器,他提供一对一的hash
1.第一个是key称为键,每个关联字只能在map中出现一次
2.第二个称为关键字的值
2.map以模板方式实现,可以储存任何类型的数据,包括使用者的自定义数据类型
3.map内部的实现自建一颗红黑树,这棵树具有对数据自动个排序的功能(升序),在map内所有数据都是有序的
4.map的功能
1.自动建立key-velue对应
map的定义
#include <iostream>
#include <map>//map函数的头文件
using namespace std;
int main(){
map<string ,int > arr;//arr是定义的map //可以改变
//类型1,类型2 可以改变 //提示 字符串类型只能是string,不能是char
}
map的函数
//例如定义的map是arr
1.arr.begin():返回起始元素的地址(迭代器)
2.arr.end():返回最后元素的下一个地址
3.arr.size():返回map中的元素个数
4.arr.insert(参数):向map中插入元素
5.arr.find(参数):查找特定的数据
6.arr.count(参数):查找特定的元素出现几次,0为没出现,1为出现
7.arr.erase(参数):删除特定的元素
插入
#include <iostream>
#include <map>
using namespace std;
int main(){
map<string,int> arr;
//例如定义的map是arr
arr["A"]=999; //用普通插入
arr["A"]=1000; //会覆盖
arr.insert(map<string ,int >::value_type("A",1234)); //用insert插入
for(map<string,int>::iterator a=arr.begin();a!=arr.end();a++)
{
cout <<a->first <<" "<<a->second<<endl; //输出key--value对应
}
}
结果
map的访问和遍历
1.定义迭代器 map<string,int>::iterator a=arr.begin()//定义了名字为a的迭代器
2.输出迭代器位置的元素 cout<<a->first<<" "<<a->second<<endl;
map<string,int>::iterator a=arr.begin()
for(map<string,int>::iterator a=arr.begin();a!=arr.end();a++)
{
cout <<a->first <<" "<<a->second<<endl;
}
下标查找法
#include <iostream>
#include <map>
using namespace std;
int main(){
map<string,int> arr;
arr["A"]=100;
if(arr["B"]!=0)//注意没有定义B
cout <<"有"<<endl;
else
cout <<"没有"<<endl;
if(arr.count("b")!=0){
cout <<"有"<<endl;//注意没有定义B
}
//map<string,int>::iterator a=arr.find("A");//多种方法
//if(a==arr.end())
//cout <<"没找到";
//else
//cout <<a->first <<" "<<a->second;
//if(arr.count("G")==1){
// cout <<"到了";
//}else{
//cout <<"没找到";}
//if(arr.count("G")==1){
// cout <<"存在";
//}
}
结果
接下来就讲完了
既然都听到这了 求三连