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. error MSB6006: “CL.exe”已退出

    解决方案之一: 删除 \Windows\System32 目录下 mspdb110.dll. 试试吧.

  2. js文件缓存之版本管理

    以前也做过不少项目,但从来就没有把关注的目光投向过js文件缓存.最近终于在毫无意识的情况下跳进了这个大坑. 近几个月来的工作是一个交易系统持续改进项目,迭代发布周期大约为2~3周.最近一次迭代是V16 ...

  3. Winfroms---看看吧客官~

    假 如 你 的 人 生 有 理 想,那 么 就 一 定 要 去 追,不 管 你 现 在 的 理 想 在 别 人 看 来是 多 么 的 可 笑 , 你 也 不 用 在 乎 , 人 生 蹉 跎 几 十 年 ...

  4. session原理及实现集群session的方案原理

    对Web服务器进行集群,Session的安全和同步是最大的问题,实现Session同步有很多种方案,常见的可能的方式有: 1.客户端Cookie加密.    用的较少,此处不详述. 2.Session ...

  5. C++资源之不完全导引 (转载)

    C++资源之不完全导引(完整版)- - 这文章太强了,我一定要转载,否则对不起观众,对不起自己.(liigo) 发信人: NULLNULL (空空), 信区: VC标  题: C++资源之不完全导引( ...

  6. thinksns解析1

    1.数据库     这儿是关于数据库的封装,还是挺厉害的,最终select中完成sql语句的封装,最后由query来完成底层api     2.初始化过程 sns也是通过框架完成显示调用,一开始通过i ...

  7. 笔记一:Python的PyDev插件在eclipse上面安装(新的插件地址 location)

    注:部分内容参考网上的,若有侵权,请作者联系我,马上进行删改 安装PyDev: 首先需要去Eclipse官网下载:http://www.eclipse.org/,Eclipse需要JDK支持,如果Ec ...

  8. ThinkPHP表单令牌验证功能详细介绍

    注:TP版本为3.1.3 在ThinkPHP框架下,两次提交同一个表单,比如提交信息后在浏览器点击后退退回上次的页面,重新点击提交按钮,就会提示“表单令牌错误”的信息. ThinkPHP新版内置了表单 ...

  9. android 代码混淆及问题大集锦

    最近在需要对所开发的项目进行了代码混淆,在android studio中开启代码混淆其实还是挺方便的,不过因为代码混淆产生的问题非常多,特别是对于一些涉及到反射的第三方库经常因为名称的变化导致无法使用 ...

  10. NET平台和C#

    .NET平台和C#编程 一.深入.NET框架 1..NET框架具有两个组件:CLR(公共语言运行时)和FCL(框架类库),CLR是.NET框架的基础 2.框架核心类库: System.Collecti ...