.NET基类库中是否有允许使用重复键的字典类?我发现的唯一解决方案是创建一个类,例如:
Dictionary<string, List<object>>
Run Code Online (Sandbox Code Playgroud)
但这对实际使用非常恼火.在Java中,我相信MultiMap可以实现这一点,但是在.NET中找不到模拟.
我想要一张带有重复键的地图.
我知道有很多地图实现(Eclipse向我展示了大约50个),所以我敢打赌必须有一个允许这个.我知道编写自己的地图很容易做到这一点,但我宁愿使用一些现有的解决方案.
也许在commons-collections或google-collections中有什么东西?
我发现他们有一个键和多个值是唯一的.
如果我们可以创建矢量图或集合图,我不明白为什么存在多图.对我来说,唯一的区别是:
equal_range在多重映射为获得一个关键的要素和载体,我们只需使用的地图[]运营商,拥有元素的矢量.multimap.insert(make_pair(key,value))在多重映射为添加元素和map_of_vectors[key].push_back(value)在载体的图谱.那么为什么要使用multimap呢?对我来说,最好有一个向量而不是两个迭代器来获取一个键的所有值.
此问题也适用于vector和unordered_multimap的unordered_map.
我正在寻找一个高性能,并发的MultiMap.我到处搜索但是我找不到使用与ConcurrentHashMap相同的方法的解决方案(仅锁定哈希数组的一部分).
多图表将经常被读取,添加和删除.
multimap键将是一个String,它的值将是任意的.
我需要O(1)来查找给定键的所有值,O(N)可以删除,但O(logN)将是首选.
删除给定键的最后一个值将从键中删除值容器至关重要,以免泄漏内存.
这是我建立的解决方案,在ApacheV2下可用: 索引(多图)
我需要一个等同std::multimap<K, V, Comp, Alloc>于C-sharp的c ++ .它是否存在于标准库中?
我没有找到这样的多图构造...当我想要这样做时,我遍历地图,并填充多图.还有其他方法吗?
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);
Run Code Online (Sandbox Code Playgroud)
第一个结果是,{1=[[a, b, c, c]]}但我期待{1=[a, b, c, c]}
是否有一种简单或标准的方法来使用多图迭代器迭代多图中的唯一键?
即对于一个看起来像的集合:{1, "a"}, {1, "lemon"}, {2, "peacock"}, {3, "angel"}
一个迭代器,它会在{1, "a"}然后开始递增,指向{2, "peacock"}然后再次递增会指向{3, "angel"}?
我目前正在尝试使用stl-datastructures.但是我仍然不确定何时使用哪一个以及何时使用某种组合.目前我想弄清楚,当使用时std::multimap确实有意义.据我所知,通过组合std::map和,可以轻松地构建自己的多图实现std::vector.所以当我们应该使用每个数据结构时,我都会遇到问题.
std::vector).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; i <= num_elements; ++i ) {
uint32_t key = rand() % num_partitions;
uint64_t value = rand();
values.push_back( std::make_pair( key, value ) );
}
clock_t …Run Code Online (Sandbox Code Playgroud) Multimap实际上具有按键排序的数据组.我想要一种方法,通过该方法我可以访问这些单独的组并获取它们的聚合值.例如,在std::multimap< string, int >I商店中
{"Group1", 1},
{"Group1", 2},
{"Group1", 3},
{"Group2", 10},
{"Group2", 11},
{"Group2", 12}
Run Code Online (Sandbox Code Playgroud)
存储了这些值之后,我应该能够迭代这个多图并获得每个"组"的聚合值.问题是STL中没有定义任何以这种方式访问MultiMaps的函数.我可以使用lower_bound,upper_bound手动迭代多图并总计组的内容,但我希望有更好的方法在STL中定义?任何人都可以提出一个解决方案,如何在上面的例子中获取组的聚合值.
multimap ×10
c++ ×5
java ×3
stl ×3
c# ×2
guava ×2
map ×2
.net ×1
concurrency ×1
containers ×1
dictionary ×1
duplicates ×1
key-value ×1
performance ×1
scala ×1