有没有使用vector <int>作为std :: map中的键的替代方法?

时间:2017-11-29 10:43:44

标签: c++ vector stdmap

我想使用整数列表作为键,所以首先想到的是使用向量作为键。还有其他方法可以比这更好吗?

编辑:密钥大小会有所不同,某些密钥可能包含数百个整数。 整数值的范围也可以是1到100,000。

2 个答案:

答案 0 :(得分:1)

如果没有关于你正在做什么的更多细节,很难肯定地回答,我很害怕。

总的来说,是的,使用>>2<作为关键可能是最好的方法,因为它是标准的,简单的,并且很容易让未来的维护者理解你的意图。

但是,如果您有约束意味着使用std::vector将是一个问题,那么可能有其他方法可用。例如,如果您限制了内存,并且您永远不需要从地图中检索原始密钥,那么您可以使用整数作为密钥并在访问之前对向量进行散列。这意味着从不存储向量本身,可能节省大量内存。然而,这将增加复杂性,因为您需要设计适当的散列函数(我不认为std::vector由标准IIRC提供),处理冲突,以及访问地图isn&# 39;这很简单,需要:std::hash<std::vector<T>>

最终,如果使用myMap[MyHashFunc(myVectorOfInts)] = myValue可以正常使用,那么这就是最佳选择。如果没有,那么更新你的问题,以表明为什么不:)

答案 1 :(得分:0)

如果密钥的大小(序列中的整数数)是固定的并且在编译时已知,则std :: array可能是更好的解决方案。否则,std :: vector是一个很好的解决方案,因为你还没有提到任何关于这个问题的东西,所以它似乎是最好的解决方案。