jjzjj

MultiMap

全部标签

java - 为什么 MultiMap 中不保留插入顺序?

publicclassMultiMap_Test{publicstaticvoidmain(String[]args){MultimapmyMultimap=ArrayListMultimap.create();myMultimap.put("classlabel","tid");myMultimap.put("Y","1");myMultimap.put("Y","2");myMultimap.put("N","4");//IteratingoverentireMutliMapfor(Stringvalue:myMultimap.values()){System.out.print(

java - 使用 TreeMap 而不是 HashMap 的 guava multimap?

我有如下内容:finalSortedMap>m=newTreeMap>();我想使用google-guava将其制作成多重map。但是,我没有看到任何提供包含ArrayList的SortedMap的实现。我只看到了HashMap+ArrayList的实现(ArrayListMultimap)。我想要的实现是否存在? 最佳答案 Guava有一个TreeMultimap按排序顺序存储键和值。但是,这使用TreeSet而不是List作为值,因此它可能不是您想要的。在这种情况下,Guava允许您使用Multimaps.new*Multima

java - 为什么 guava Multimap.values() 返回一个平面集合而不是集合的集合?

我真的很喜欢Multimap谷歌Guava图书馆的类。它是一种映射类型,您可以在其中为一个键添加多个值,因此它有效地从一个键映射到某种类型的集合。我特别喜欢的是Multimaps.index()接受一个Iterable和一个键函数并返回一个Multimap的函数,它根据值对Iterable的元素进行分组(或索引或​​映射)该函数返回每个元素。我觉得有点奇怪的是Multimap.values()返回平面集合而不是集合集合?因此,一旦Ì检索值,索引函数给我的分组就会丢失。我可以通过调用Multimap.asMap()来绕过这个问题然后调用values()。有谁知道为什么Multimap会那

Multimap与Cache的Java Guava组合

有没有像Guava的Cache和Multimap功能组合这样的东西可用?本质上,我需要一个集合,其中条目在给定时间后过期,例如Cache中可用,但我有非唯一键,我需要条目独立过期。 最佳答案 我认为LouisWasserman在上面的评论之一中提供了答案,即没有可用的Multimap和Cache的现成组合。我已经使用下面伪代码中概述的解决方案解决了我的问题/要求:privateCachecache=CacheBuilder.newBuilder().SomeConfig.build();privateMultimapmultimap

java - 将两个 Map 组合成一个 MultiMap

在Java中将两个Map组合成一个GuavaMultiMap的最佳方法是什么?例如:Map1包含(1,a)和(2,b)Map2包含(2,c)和(3,d)然后生成的组合多图将包含(1,{a})、(2,{b,c})和(3,{d})这是我目前的解决方案:MultimapcombineMaps(Mapmap1,Mapmap2){Multimapmultimap=newMultiMap();for(finalMap.Entryentry:map1.entrySet()){multimap.put(entry.getKey(),entry.getValue());}for(finalMap.Ent

c++ - Python 等效于 std::set 和 std::multimap

我正在将C++程序移植到Python。它在某些地方使用std::set来存储定义自己的比较运算符的对象。由于Python标准库没有std::set的等价物(一种排序的键值映射数据结构),我尝试使用普通字典,然后在迭代时对其进行排序,如下所示:def__iter__(self):items=self._data.items()items.sort()returniter(items)但是,分析表明从.sort()到__cmp__的所有调用都是一个严重的瓶颈。我需要一个更好的数据结构——本质上是一个排序的字典。有谁知道现有的实现?如果做不到这一点,关于我应该如何实现这个的任何建议?读取性能

c++ - std::multimap::find 将返回哪个元素,类似地 std::multiset::find?

这个问题很可能是重复的,但我找不到对它的引用。我在看std::multiset::find&std::multimap::find函数,我想知道如果多次插入特定键将返回哪个元素?来自描述:Noticethatthisfunctionreturnsaniteratortoasingleelement(ofthepossiblymultipleequivalentelements)问题是否保证单个元素是第一个插入的还是随机的?背景我问的原因是我正在实现类似于类的multipmap:typedefstd::vectorItem_vector;classItem{stringm_name;};

c++ - multimap 与带集合的 map

我想知道哪个更有效。std::map>或std::multimap编辑:我不打算用这些map做任何不寻常的事情。标准的插入、删除、修改、搜索。每个set或multikeyedString的大小不应超过100。 最佳答案 我认为这取决于实现,但是(未经)教育的猜测:实际上,这取决于您将在multimap或std::set中保留的整数数量。multimap很可能会在对键进行log(n)搜索之后对值进行线性搜索。如果您有大量整数值,则对键进行log(n)搜索,然后对值进行log(n)搜索可能会稍微快一些。然而,就效率而言,使用string

c++ - 如何将元素插入 multimap ?

我想在C++中设置一个multimap如下:multimap,vector>mmList;但是我怎样才能在其中插入数据呢?我尝试了以下代码,但它没有编译:mmList.insert(pair,vector("a","b",test)); 最佳答案 您可以使用std::make_pair(a,b)构造对。通常,您可以将对插入到map/多map中。在您的情况下,您必须构造一个由字符串对和vector组成的对:std::multimap,std::vector>mmList;std::vectorvec;mmList.insert(std

c++ - STL 的 multimap 如何插入尊重排序?

我有一些带有整数索引的数据。我不断生成新数据,这些新数据需要添加到我拥有的数据集合中,按该索引排序,同时我希望能够轻松地开始数据并遍历它。这听起来std::multimap正是我所需要的。但是,我还需要按照插入顺序保存具有相同索引的数据,在这种情况下,这意味着当我遍历数据时,我会先获取较早的数据,然后再获取较晚的数据。multimap会这样做吗?我没有找到任何保证是这种情况。在sgi手册中,我没有看到任何提及是否。我在gcc4.3.4实现上进行了尝试,对于一些有限的测试用例似乎是正确的,但我当然想知道标准是否要求这样做,我可以依赖这个事实。编辑:为了更清楚地回应一些答案,我希望数据首先