我有一个效率至关重要的应用程序,需要一种类似于数组的数据结构A
。它的键为0, 1, 2,...
,其值为uint64_t
类型的不同值。我需要两个常量操作:
1. Given i, return A[i];
2. Given val, return i such that A[i] == val
我不想使用哈希表。因为我尝试过GLib GHashTable,将6000万个值加载到哈希表中需要大约20分钟的时间(如果我删除插入语句,则只需要大约6秒)。这个时间对我的应用程序来说是不能接受的。或许有人能推荐其他哈希表库吗?我尝试了uthash.c,但它立即崩溃了。
我还尝试了SDArray,但似乎不是合适的选择。
有人知道任何可以满足我的要求的数据结构吗?或者有任何高效的哈希表实现吗?我更喜欢使用C/C++。
谢谢。
std::unordered_map
。一般来说,您需要两个哈希表,一个用于键值查找,另一个用于值-键查找。当然,您必须在两个表中插入新条目。 - leemesstd::unordered_map
,请调用my_unordered_map.reserve(6e7)
(6e7 == 6000万)。 - Nicu Stiurca