存储对映射的最有效方法

时间:2015-12-07 09:01:12

标签: c++ boost hashmap

我必须将对的映射存储为double:

boost::unordered_map<pair<int, int>, double> P;

我发现访问地图是算法的瓶颈。

我只插入一次值(大约成千上万对)。我有时更新值,有时只是查找。

有哪些方法可以优化查找和更新值的运行时间?

修改

以下是我如何循环数据:

p = make_pair(u, v);
q = P[p];

我发现第二行需要花费更多的时间来制作一对,因为我需要多次查找许多键才需要花费很多时间。

1 个答案:

答案 0 :(得分:0)

您可以尝试将两个整数合并为一个整数,并将此整数用作关键字。如果使用整个值范围int(假设4个字节),则long long(假设8个字节)可能包含2:

int a = ...;
int b = ...;
long long combined = (static_cast<long long>(a) << 32) | b;

当然,如果值适合short,则可以使用较小的数据类型。建议使用固定大小的类型,如std::int32_t,以保持清晰度和便携性。

调整哈希函数以便以不同的方式组合first second std::pair成员已经足够了。为此,最好更清楚地了解查找的哪个部分占用的时间最多。

如果哈希函数本身不是问题,那么boost::flat_map等不同的数据结构值得一试。