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;
}

STL之map、multimap的更多相关文章

  1. STL:map/multimap用法详解

    map/multimap 使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则 ...

  2. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  3. 【STL】-Map/Multimap的用法

    初始化: map<string,double> salaries; 算法: 1. 赋值.salaries[ "Pat" ] = 75000.00; 2. 无效的索引将自 ...

  4. 【C++ STL】Map和Multimap

    1.结构 Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理.他们根据key的排序准则将元素排序.multimap允许重复元素,map不允许. 元素要求: k ...

  5. STL中的map/multimap小结

    (1)使用map/multimap之前必须包含头文件<map>:#include<map> 并且和所有的关联式容器一样,map/multimap通常以平衡二叉树来完成 (2)n ...

  6. iBinary C++STL模板库关联容器之map/multimap

    目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...

  7. STL之Map和multimap容器

    1.Map和multimap容器 1)map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. 2)map中key值是唯一的.集合中的元素按一 ...

  8. STL中 map 和 multimap

    1. 所在头文件<map>. 命名空间std, 声明如下: namespace std{ template <class Key,class T, class Compare = l ...

  9. STL之六:map/multimap用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap 使用map/multimap之前要加入头文件# ...

  10. STL——容器(Map & multimap)的删除

    Map & multimap 的删除 map.clear();           //删除所有元素 map.erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的 ...

随机推荐

  1. autoreleasepool的笔记

    1.autoreleasepool总是会被问到,放在自动释放池中的对象合适被释放?理解不正确的答案:{}出了大括号.出了作用域等等.个人认为参考答案是,1.在不是手动添加的AutoreleasePoo ...

  2. iOS多Targets管理

    序言: 个人不善于写东西,就直奔主题了. 其实今天会注意到多targets这个东西,是因为在学习一个第三方库FBMemoryProfiler的时候,用到了,所以就搜索了一些相关资料,就在这里记录一下. ...

  3. 这次是C#中的接口

    接口的出现,是为了解决C#中不允许多重继承的问题. 1.什么是接口? 我觉得可以把接口理解为对一组方法声明进行的统一命名,但这些方法没有提供任何实现. 通过接口,就可以对方法进行统一管理,避免了在每种 ...

  4. LInkedList集合练习

    package com.java.linkedlist; import java.util.LinkedList; /* * LinkedList类的特点:查询速度慢,增删速度快. * LinkedL ...

  5. [Introduction to programming in Java 笔记] 1.3.9 Factoring integers 素因子分解

    素数 A prime is an integer greater than one whose only positive divisors are one and itself.整数的素因子分解是乘 ...

  6. 【BZOJ3456】【CDQ分治+FNT】城市规划

    试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...

  7. 帝国cms 灵动标签调用顶级栏目导航

    [e:loop={"select classname,classpath from [!db.pre!]enewsclass where bclassid=0 order by classi ...

  8. 关于C# json转object时报错:XXXXXXXXXX需要标记“"”,但找到“XX”。

    使用的类:System.Runtime.Serialization.Json.DataContractJsonSerializer //MessagePackage 为要转成的类DataContrac ...

  9. [BZOJ 3564] [SHOI2014] 信号增幅仪 【最小圆覆盖】

    题目链接:BZOJ - 3564 题目分析 求最小椭圆覆盖,题目给定了椭圆的长轴与 x 轴正方向的夹角,给定了椭圆长轴与短轴的比值. 那么先将所有点旋转一个角度,使椭圆长轴与 x 轴平行,再将所有点的 ...

  10. Git如何Check Out出指定文件或者文件夹

    原文  http://www.handaoliang.com/a/20140506/195406.html 在进行项目开发的时候,有时候会有这样的需求那就是:我们只希望从Git仓库里取指定的文件或者文 ...