我有一些需要存储和有效查找的数据。最好用C. 数据文件的每一行都采用以下格式:
key1 key2 key3 data
其中key1
,key2
,key3
是整数,data
是float
的数组。
我正在考虑将key1,2,3转换为字符串,然后使用C ++ std::map
将字符串映射到浮点指针:
std::map<string, float*>
有更好的方法吗?
注意:整数key1,2,3的范围为0-4000,但填充非常稀疏。换句话说,如果你浏览key1中的所有值,你会发现&lt;在0到4000之间的范围内100个唯一的int。
答案 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个唯一值。