我必须将对的映射存储为double:
boost::unordered_map<pair<int, int>, double> P;
我发现访问地图是算法的瓶颈。
我只插入一次值(大约成千上万对)。我有时更新值,有时只是查找。
有哪些方法可以优化查找和更新值的运行时间?
修改
以下是我如何循环数据:
p = make_pair(u, v);
q = P[p];
我发现第二行需要花费更多的时间来制作一对,因为我需要多次查找许多键才需要花费很多时间。
答案 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
等不同的数据结构值得一试。