multimap的实际用途

由map引出的问题

最近在看《C++并发编程实战》提到,实现一个细粒度的MAP数据结构,里面只能使用哈希表。然后table里面的pair()中key和value是一一对应的所以,就可以在后台内存建立一张由用户ID(key)组成的用户状态多线程并发表。然后我就想到了,那么multimap的实际作用是什么呢?然后就卡住了,经过上网查阅,我得到了以下的例子:
比如在电话簿中相同的人可以有两个以上电话号码,文件系统中可以将多个符号链接映射到相同的物理文件,或DNS服务器可以将几个URLs映射到相同的IP地址。

其中这一篇文章介绍的比较详细,结论:虽然 map 和 multimap 具有相同的接口,其重要差别在于重复键,设计和使用要区别对待。此外,还要注意每个容器里 insert()成员函数的细微差别。
STL里的multimap使用简介。

这篇文章通过对Insert问题的探讨,通过实验得出,在VS2013环境中,无序关联容器的桶大小是8的n次方,而且bucket_count()和max_bucket_count()是相等的,通过这个测试,可以得出两个结论:(1)无序关联容器中建立桶的大小与编译器的实现有关(这一点,可以点击这个链接查看点击打开链接);(2)无序关联容器底层的真正实现就是一个一维Hash数组,即每个桶都只保存一个元素,只是说具有相同关键字的元素组成相邻的桶。
unordered_multimap的insert问题

这篇就简单介绍了下用法:
在C++中,multimap中如果有一个key对应了几个value,那么怎样才能将它对应的value一一输出

#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{multimap<string,int> m_map;string s("中国"),s1("美国");m_map.insert(make_pair(s,50));m_map.insert(make_pair(s,55));m_map.insert(make_pair(s,60));m_map.insert(make_pair(s1,30));m_map.insert(make_pair(s1,20));m_map.insert(make_pair(s1,10));//方式1int k;multimap<string,int>::iterator m;m = m_map.find(s);for(k = 0;k != m_map.count(s);k++,m++)cout<<m->first<<"--"<<m->second<<endl;//方式2multimap<string,int>::iterator beg,end;beg = m_map.lower_bound(s1);end = m_map.upper_bound(s1);for(m = beg;m != end;m++)cout<<m->first<<"--"<<m->second<<endl;//方式3beg = m_map.equal_range(s).first;end = m_map.equal_range(s).second;for(m = beg;m != end;m++)cout<<m->first<<"--"<<m->second<<endl;return 0;
}

multimap的实际用途相关推荐

  1. 【C++】set/multiset/map/multimap

    文章目录 一.set/multiset (集合) 1 set概念(自动排序.底层红黑树) 2 set构造和赋值(默认.拷贝.=赋值) 3 set大小和交换(size.empty.swap) 4 set ...

  2. C++ multimap 的使用

    multimap 说明 C++ 中multimap 的主要特点是允许有重复的key 其他的特点和map 类似 multimap 同样也是STL中的模板使用的时候 需要先引入 #include < ...

  3. Java的反射作用_浅析Java 反射机制的用途和缺点

    反射的用途 Uses of Reflection Reflection is commonly used by programs which require the ability to examin ...

  4. typedef的四个用途和两大陷阱

    typedef的四个用途和两个陷阱 --------------------------------- 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: c ...

  5. android怎么监听多点触摸_什么是多点触控技术,有哪些用途

    自从乔布斯将触控技术用于苹果手机上,很多的手机厂商纷纷效仿,触控技术几乎成为手机的"标配".其实,触控技术早就存在,只是一直未能大面积用于各种设备中,本文将带您认识神奇的触控技术. ...

  6. map multimapc++_C++的Map和Multimap

    广州C++培训的小编这一期给大家讲Map和Multimap. 6.6 Maps和Multimaps map和multimap将key/value pair当作元素进行管理.他们可根据key的排序准则自 ...

  7. 网络新手ip隐藏器_动态IP代理的用途

    在如今互联网迅速发展的时代,我们的生活几乎离不开网络,而且网络也逐渐成为了大家赖以生存的工作.如何更好地运用网络已然成为了很多人的工作重心.对于互联网行业工作者来说,对于动态IP代理已经很普遍,但是我 ...

  8. 中key的用途_Micro Focus Operations Bridge Manager中的多个(RCE)漏洞

    从供应商的网站上. OBM作为操作桥为您的IT操作提供了一个单一的控制中心.所有来自服务器.网络.应用程序.存储和基础设施中其他IT孤岛的事件和性能管理数据都会被整合到一个先进的中央事件控制台的单一事 ...

  9. Javascript闭包和闭包的几种写法及用途

    好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途.  一.什么 ...

最新文章

  1. micropython mqtt_MicroPython使用MQTT协议接入OneNET云平台
  2. Linux学习(CentOS-7)---磁盘分区(概念、分区方法、分区方案)
  3. mysql函数快速查找
  4. 跑得比TensorBoard快多了,极简可视化工具Aim发布 | Reddit高热
  5. Python opencv 获取图像形状大小
  6. 【WEB API项目实战干货系列】- API访问客户端(WebApiClient适用于MVC/WebForms/WinForm)(四)
  7. java7代码示例_Java中的七种排序方式代码示例
  8. C#中的CultureInfo类
  9. 线程让出实验【RT-Thread学习笔记 4】
  10. CMDB整体项目梳理(1)
  11. 温故10个经典排序算法(Java版)
  12. 利用WinSock进行有连接的通信
  13. 诹图系列(2): 堆积条形图
  14. 读者推荐 · 一个美观的简历生成器
  15. ERP项目基础概念整理
  16. sql未保存文档找回
  17. 【LearningChain】WhenMachineLearningMeetsBlockchainADecentralizedPrivacy-preserving and SecureDesign
  18. AMM引入无限网格策略,变无常损失为阿尔法收益
  19. JVM上篇:内存与垃圾回收篇十四--垃圾回收器
  20. GitHub 的设置代码上传

热门文章

  1. 值得我们思考的5个问题
  2. 云原生边缘计算:探索与展望
  3. 服务器机柜pdu安装位置,机柜电源插座和机柜之间的安装关系
  4. 基于Java实现的图片搜索系统
  5. Java工程师未来的三大就业方向
  6. 个人的偏好与擅长的领域
  7. 文献科普|DNA甲基化通过CTCF和黏着蛋白复合物调节选择性聚腺苷酸化
  8. ARKit之路-运动跟踪原理
  9. 新手想开一个传奇该如何操作?开一个传奇必须掌握哪些知识要点
  10. 完整的电商网页,技术html,css