通过3 int查找值的有效方法

时间:2012-08-11 01:27:08

标签: c++ c dictionary map lookup

我有一些需要存储和有效查找的数据。最好用C. 数据文件的每一行都采用以下格式:

key1 key2 key3 data  

其中key1key2key3是整数,datafloat的数组。

我正在考虑将key1,2,3转换为字符串,然后使用C ++ std::map将字符串映射到浮点指针:

std::map<string, float*>

有更好的方法吗?

注意:整数key1,2,3的范围为0-4000,但填充非常稀疏。换句话说,如果你浏览key1中的所有值,你会发现&lt;在0到4000之间的范围内100个唯一的int。

4 个答案:

答案 0 :(得分:5)

您可以使用std::tuple将三个值合并为一个:

std::map<std::tuple<int, int, int>, float *>

答案 1 :(得分:2)

如果每个键的数据限制为0到4000

,则不必使用字符串

首先生成组合键,如下所示:

unsigned long ulCombinedKey = key1 + key2<<12 + key3 <<24;

之后,您可以按照问题中的说明使用地图。

答案 2 :(得分:1)

分层图可以做到:

map<int, map<int , map<int, list<float> > > > records;

并且访问时间会很好(对数)。 如果范围非常宽,这种方式将是有效的。否则对于4000,在先前答案中给出的建议的变化更快且更有效。

答案 3 :(得分:0)

哈希提供了对数据的非常快速的访问,因此您可能希望使用哈希来查找三个整数中的每一个的值。这种方法可以在c或c ++中使用。

对于每一行数据: 1.为浮点数组分配空间 2.在指针数组中存储指向浮点数组的指针 3.将指针数组的索引存储在基于int1的哈希中 4.将指针数组的索引存储在基于int2的哈希中 5.将指针数组的索引存储在基于int3

的哈希中

这样,给定int1,int2或int3,可以查找指针数组索引,检索指针,然后按照指针指向浮点数组。这种方法使用一些内存,但不是太多,因为问题说有&lt;每个int1,int2和int3都有100个唯一值。