map 是一类关联式容器,它的特点是增加和删除元素对迭代器影响很小,除了那个操作元素,对其他的元素都没有什么影响,对于迭代器来说,可以修改实值,但不能修改key;
1、自动建立key—value的对应;key和value可以是任意数据类型;
2、根据key值快速查找记录,查找的基本复杂度为log(N),1000个记录最多查10次;
3、快速插入key—value值;
4、快速删除记录;
5、遍历所有记录;
使用map 得包含map类的头文件(#include<map>);
map 对象是模板类,需要关键字和存储对象两个模板参数(map<int,string> m 用int作为索引,并拥有相关联的指向string的指针);
在map中插入元素:
改变map中的条目:
m[1] = "One"; m[2] = "Two";非常直观,但存在一个性能问题,插入2时,先在m中查找主键为2的项,没发现,然后将一个新的对象插入到m中,键是2,值是一个空字符串,插入完成后,将字符串赋值为“Two”;该方法会将每个值都赋为缺省值,然后再赋为显示的值,可以用一下方法避免: m.insert(map<int , string>::value_type(2,"Two"));
查找并获取map中的元素:
下面给出一个获取一个元素的简单方法:
string s = m[2];
我们可以使用Find()和Count()来发现一个键是否存在;
查找map是否包含某个关键字条目用find(),传入的参数是要查找的key,begin( )和end( )两个成员,分别代表map中第一个条目和最后一个条目,这两个数据类型是:iterator
int nFindkey = 2; //要查找的key;
map<int , string >::iterator it = m.find(nFindkey);
if(it == m.end)
cout<<"没有找到"<<endl;
else
cout<<"找到"<<endl;
通过map对象的方法获取的iterator数据类型是std::pair对象;包括两个数据iterator ->first 和 iterator ->second分别代表关键字和存储的数据
从map中删除元素用erase()
该成员方法的定义如下:
iterator erase(iterator it); //通过一个条目对象删除;
iterator erase(iterator first , iterator last); //删除一个范围
size_type erase(const key &key ) //通过关键字删除
以下是对C++中STL map的插入、查找、遍历和删除:
插入、查找:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map <string,string> maps;
map <string,string>::iterator it;
//插入数据
maps.insert(map<string,string>::value_type("12013210632","Scott"));
maps.insert(map<string,string>::value_type("12013210635","T^T"));
maps.insert(map<string,string>::value_type("121321063","T^T^T"));
it = maps.find("12013210635");
if(it != maps.end()){
cout<<"Find"<<endl;
cout<<it->second<<endl;
}
else
cout<<"Not Find"<<endl;
return 0;
}
遍历:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map <string,string> maps;
map <string,string>::iterator it;
//插入数据
maps.insert(map<string,string>::value_type("12013210632","Scott"));
maps.insert(map<string,string>::value_type("12013210635","T^T"));
maps.insert(map<string,string>::value_type("1213210630","T^T^T"));
for(it = maps.begin();it != maps.end();++it)
cout<<"| "<<it->first<<" | "<<it->second<<" | "<<endl;
return 0;
}
删除:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map <string,string> maps;
map <string,string>::iterator it;
//插入数据
maps.insert(map<string,string>::value_type("12013210632","Scott"));
maps.insert(map<string,string>::value_type("12013210635","T^T"));
maps.insert(map<string,string>::value_type("12013210630","T^T^T"));
it = maps.find("12013210632");
if(it != maps.end())
maps.erase(it);
else
cout<<"Not Find"<<endl;
for(it = maps.begin();it != maps.end();++it)
cout<<it->first<<" "<<it->second<<endl;
return 0;
}
参考:
http://m.blog.csdn.net/blog/szu030606/8565318