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

被折叠的 条评论
为什么被折叠?



