【发布时间】:2015-10-06 15:33:07
【问题描述】:
我现在正在开发一个处理一些指数时间算法的程序。正因为如此,我的程序的一个主循环运行了很多次,我正在尝试尽可能优化它。
分析表明,大部分时间都花在了std::unordered_map 的查找和哈希计算上。
我想知道:
有没有办法缓存
std::unordered_map的键的哈希值,然后将其作为参数提供以供以后插入?有没有一种方法可以在单个操作中执行以下操作:给定一个键和值
{x,y},检查键x是否在映射中,如果不在,插入它并返回{x,y},否则返回{x,z},无论z已经在地图中。
我现在正在做这样的事情,但是效率很低,因为我必须计算键的哈希值并检查它是否在地图中。但如果它不在地图中,我会进行完全独立的插入操作。理论上,检查它是否存在于地图中应该会找到它在地图中插入的位置。
我愿意尝试其他数据结构,例如 std::map 或来自 Boost 的东西,如果它们可以减少此操作的时间。
【问题讨论】:
-
改用线程。或者您可以使用 OpenMP 并行化您的循环
-
密钥类型是什么?
-
顺便说一句,你研究过插入提示吗?
-
有一种插入函数形式,它接受一个提示——一个指向搜索开始位置的迭代器。如果你已经有一个职位,你可以试试这个。不过,这对于有序地图非常有用。
-
@NathanOliver,向量与列表比较与关联容器有什么关系????
标签: c++ optimization data-structures stl unordered-map