为了将一组整数变量映射到值(说我有a1, a2, a3, a4, a5, a6
来确定值v
; 这是一个类似map<tuple<int, int, int, int, int, int>,VALUE_TYPE>
的地图或map<struct{int, int, int, int, int, int},VALUE_TYPE>
),我们可以使用
我对这些方法的表现非常好奇。在我的情况下,
问题是哪种方式在我的情况下表现更好?
如果选择了struct或class key,是否有任何技巧可以使比较器更有效?
unordered_map更适合这种情况吗?我该如何计算密钥的哈希值?
对于解决方案的任何建议或评论,我将非常感激。关于更一般情况的讨论也受到欢迎。提前谢谢。
答案 0 :(得分:4)
基本上:实施不同的解决方案,编写性能测试程序并进行测量!
当然可以:
std::array<>
容器(已提供运算符进行比较)。std::unordered_map<>
)比有序地图(std::map<>
)快,但当然只有在您不需要使用部分密钥搜索时才能使用。答案 1 :(得分:0)
另外,如果您的数字相对较小并且密钥中有很多数据,请考虑实施trie数据结构。就像std::unordered_map
一样,这将允许您在O(l)
时间内访问元素,其中l
是键的长度,但它也允许您以递增的顺序迭代所有值并通过部分键找到一个值。这里的问题是你的内存消耗将与字母表大小成正比(当然,你可以将内边缘存储在一些复杂的数据结构中,但这会对性能产生负面影响)。