multimap的实际用途

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 
#include 
#include 
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<first<<"--"<second<//方式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<first<<"--"<second<//方式3
    beg = m_map.equal_range(s).first;
    end = m_map.equal_range(s).second;
    for(m = beg;m != end;m++)
        cout<first<<"--"<second<return 0;
}

你可能感兴趣的:(C++)