Map是什么
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
Map头文件
#include <map>
Map的常用构造函数
map对象是模板类,需要关键字和存储对象两个模板参数:
map<int,string> stuMap; //关键字为int数据类型,值为string数据类型
Map数据的三种插入方式(+正向遍历)
1.用insert函数插入pair数据
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int,string> stuMap;
stuMap.insert(pair<int,string>(1,"student_one"));
stuMap.insert(pair<int,string>(2,"student_two"));
map<int,string>::iterator iter;
for(iter=stuMap.begin();iter!=stuMap.end();iter++)
{
cout<<iter->first<<' '<<iter->second<<endl;
}
return 0;
}
2.用insert函数插入value_type数据
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int,string> stuMap;
stuMap.insert(map<int,string>::value_type(1,"student_one"));
stuMap.insert(pair<int,string>(2,"student_two"));
map<int,string>::iterator iter;
for(iter=stuMap.begin();iter!=stuMap.end();iter++)
{
cout<<iter->first<<' '<<iter->second<<endl;
}
return 0;
}
3.用数组方式插入数据
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int,string> stuMap;
stuMap[1]="student_one";
stuMap.insert(pair<int,string>(2,"student_two"));
map<int,string>::iterator iter;
for(iter=stuMap.begin();iter!=stuMap.end();iter++)
{
cout<<iter->first<<' '<<iter->second<<endl;
}
return 0;
}
Map(反向遍历)
map<int,int>::reverse_iterator r_iter;
for (r_iter = map.rbegin(); // binds r_iter to last element
r_iter != map.rend(); // rend refers 1 before 1st element
++r_iter) // decrements iterator one element
cout << *r_iter << endl; // prints 9,8,7,...0
Map的大小
stuMap.size();
查找和获取Map中的元素的两种方法
1.用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1,出现的情况,当然是返回1了
stuMap.count(1);
2.用find函数来定位数据出现位置,它会返回一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int,string> stuMap;
stuMap[1]="student_one";
stuMap.insert(pair<int,string>(2,"student_two"));
map<int,string>::iterator iter;
iter=stuMap.find(1);
if(iter != stuMap.end())
{
cout<<"Find,the key is "<<iter->first<<",the value is " <<iter->second<<endl;
}
else
{
cout<<"Do not find"<<endl;
}
return 0;
}
从Map中删除元素
移除某个map中的某个条目用erase()
该成员方法的定义如下:
iterator erase (iterator it); //通过一个条目对象删除
iterator erase (iterator first,iterator last); //删除一个范围
size_type erase(const Key&key); //通过关键字删除
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int,string> stuMap;
stuMap[1]="student_one";
stuMap.insert(pair<int,string>(2,"student_two"));
map<int,string>::iterator iter;
//用迭代器删除
iter=stuMap.find(1);
stuMap.erase(iter);
//用关键字删除
int n=stuMap.erase(2);
//用迭代器成片地删除
stuMap.erase(stuMap.begin(),stuMap.end());
for(iter=stuMap.begin();iter!=stuMap.end();iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
return 0;
}