Tag: multimap

什么时候使用std :: multimap是有意义的

我目前正在尝试使用stl-datastructures。 但是,我仍然不确定何时使用哪一个,何时使用某个组合。 目前我想弄清楚,当使用std::multimap确实有道理。 就我所见,通过组合std::map和std::vector ,可以轻松地构build自己的multimap实现。 所以我留下了这些数据结构应该被使用的问题。 简单性:std :: multimap使用起来更简单,因为不需要处理额外的嵌套。 但是,作为批量元素访问一系列元素可能需要将数据从迭代器复制到另一个数据结构(例如std::vector )。 速度:vector的局部性最有可能使迭代在相等元素的范围上更快,因为caching使用被优化。 不过,我猜测, std::multimaps也有很多优化技巧背后,尽可能快地迭代相同的元素。 同样,正确的元素范围可能会被优化为std::multimaps 。 为了尝试速度问题,我使用下面的程序做了一些简单的比较: #include <stdint.h> #include <iostream> #include <map> #include <vector> #include <utility> typedef std::map<uint32_t, std::vector<uint64_t> > my_mumap_t; const uint32_t num_partitions = 100000; const size_t num_elements = 500000; int main() { srand( 1337 ); std::vector<std::pair<uint32_t,uint64_t>> values; for( size_t i = 0; […]

如何从Map <K,Collection <V >>创buildMultimap <K,V>?

我没有find这样的多图构build…当我想要这样做时,我遍历地图,并填充多图。 还有其他的方法吗? final Map<String, Collection<String>> map = ImmutableMap.<String, Collection<String>>of( "1", Arrays.asList("a", "b", "c", "c")); System.out.println(Multimaps.forMap(map)); final Multimap<String, String> expected = ArrayListMultimap.create(); for (Map.Entry<String, Collection<String>> entry : map.entrySet()) { expected.putAll(entry.getKey(), entry.getValue()); } System.out.println(expected); 第一个结果是{1=[[a, b, c, c]]}但我期望{1=[a, b, c, c]}

多映射与vector映射的优点是什么?

我不明白为什么multimap存在,如果我们可以创buildvector地图或集地图。 对我而言,唯一的区别是: 在multimap中使用equal_range来获得一个键的元素,在vector地图中,我们简单地使用[]运算符并且具有元素的向量。 在multimap.insert(make_pair(key,value))使用multimap.insert(make_pair(key,value))在向量映射中添加元素和map_of_vectors[key].push_back(value) 。 那么为什么要使用multimap呢? 对我来说,最好有一个向量比两个迭代器来获得一个键的所有值。 这个问题也适用于vector和unordered_multimap的unordered_map。

std :: multimap <key,value>和std :: map <key,std :: set <value>>有什么区别

我发现他们有一个唯一的键和多个值。

使用重复键映射实现

我想拥有带有重复键的Map,我知道有很多Map的实现(日食显示了我约50),所以我敢打赌,必须有一个允许这个。 我知道它很容易编写自己的地图,但我宁愿使用一些现有的解决scheme。 也许有一些共同点 – collections或谷歌collections?

.NET字典中的重复键?

.NET基类库中是否有允许使用重复键的字典类? 我find的唯一解决scheme是创build一个类,例如: Dictionary<string, List<object>> 但是这实际上使用起来很刺激。 在Java中,我相信一个MultiMap可以完成这个任务,但在.NET中找不到一个模拟器。

stl :: multimap – 我如何获得数据组?

Multimap本质上具有按键sorting的数据组。 我想要一个方法,我可以访问这些个人群体,并获得他们的总值。 例如,在一个std::multimap< string, int >我的商店 {"Group1", 1}, {"Group1", 2}, {"Group1", 3}, {"Group2", 10}, {"Group2", 11}, {"Group2", 12} 已经存储这些值,我应该能够迭代这个多图,并获得每个“组”的聚合值。 问题是在STL中没有定义任何以这种方式访问​​MultiMaps的函数。 我可以使用lower_bound , upper_bound手动迭代multimap和总计组的内容,但我希望能有更好的方法已经在STL中定义? 任何人都可以提出一个解决scheme,我怎样才能得到上面的例子中的一个组的聚合值。

.NET中的multimap

我需要在C-sharp中与c ++的std::multimap<K, V, Comp, Alloc>等价。 它是否存在于标准库中?