map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
map中key值是唯一的。集合中的元素按一定的顺序排列。元素的插入过程是按照排序规则插入,所以不能指定插入位置。
map的具体实现采用红黑树的变体平衡二叉树的数据结构。在插入删除操作上快于vector。
map可以直接存取key对应的value,支持[]操作符,如map[key] = value;
multimap与map的区别:map支持唯一键值,每个键值只能出现一次,而multimap中相同键可以出现多次multimap不支持[]操作符.
map中插入元素有三种方式:
map<int,string> mapA;
mapA.insert(pair<int,string>(,"小王"));
mapA.insert(map<int,string>::value_type(,"小李"));
mapA[] = "小刘";
.insert()方法返回值是pair<iterator,bool>
pair<map<int,string>::iterator,bool> pairResult = mapA.insert(pair<int,string>(4,"小猪"));
map<int,string,less<int>> mapA;//这样就是关键字升序
map<int,string,greater<int>> mapA;
mapA.insert(pair<int,string>(,"小王"));
mapA.insert(map<int,string,greater<int>>::value_type(,"小李"));
mapA[] = "小刘";mapA.insert(make_pair(6,"小彭"));
pair<map<int,string,greater<int>>::iterator,bool> pairResult = \
mapA.insert(pair<int,string>(,"小猪"));
for (map<int,string,greater<int>>::iterator it = mapA.begin();it != mapA.end();it++)
{
cout<<it->second<<" ";
}
cout<<endl;
以上是升序
虽然说查找似乎有两种方法但是我只是成功了一种另一种总是有bug所以我还是只贴出来一个算了:
//声明和定义
struct userdevice
{
string m_devicename;
long m_deviceid;
int m_devicePopedom;
}; typedef multimap<string,userdevice> USERTABLE;
typedef USERTABLE::const_iterator CIT;
typedef pair<CIT,CIT> Rang; //主函数
CIT itmset; userdevice d1,d2,d3,d4;
d1.m_deviceid = ;
d1.m_devicename = "d1";
d1.m_devicePopedom = ; d2.m_deviceid = ;
d2.m_devicename = "d2";
d2.m_devicePopedom = ; d3.m_deviceid = ;
d3.m_devicename = "d3";
d3.m_devicePopedom = ; d4.m_deviceid = ;
d4.m_devicename = "d4";
d4.m_devicePopedom = ; USERTABLE m_user;
m_user.insert(make_pair("liuzhimin",d1));
m_user.insert(multimap<string,userdevice>::value_type("peng",d2));
m_user.insert(make_pair("liuzhimin2",d3));
m_user.insert(make_pair("liuzhimin2",d4)); Rang range = m_user.equal_range("peng");
for (CIT i = range.first;i != range.second;i++)
{
cout<<i->second.m_deviceid<<','\
<<i->second.m_devicename.c_str()<<','\
<<i->second.m_devicePopedom<<endl;
}