multimap的实际用途

本文讨论了multimap在C++中的实际用途,如电话簿中的多电话号码映射,文件系统的符号链接和DNS服务器的URL到IP映射。文章强调了map与multimap在处理重复键上的区别,并介绍了STL中multimap的使用,包括插入操作的特性和无序关联容器的桶大小。还提及了如何在multimap中遍历并输出同一key对应的多个value。

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));
    //方式1
    int 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;
    //方式2
    multimap<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;
    //方式3
    beg = 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值