我实现了一个算法,其中使用了优先队列。 我受到了这个问题的启发: 将std :: multimap转换为std :: priority_queue
我将存储多达1000万个具有特定优先级值的元素。
然后,我想要迭代直到队列为空。 每次检索元素时,它也会从队列中删除。
之后,我会重新计算元素的优先级值,因为由于以前的迭代,它可能会改变。
如果值增加,我会再次将该元素插入队列。 这取决于进度而发生得更加频繁。 (在前25%时不会发生,在接下来的50%中会发生,在最后25%中会发生多次)。
在接收到下一个元素并且没有重新插入它之后,我将对其进行处理。 为此,我不需要该元素的优先级值,而是需要技术ID。
这就是我直觉地选择使用std::multimap
来实现这一点的原因,使用 .begin()
获取第一个元素,.insert()
插入它,.erase()
删除它。
此外,我没有直觉地选择 std::priority_queue
,因为其他问题回答了与该主题相关的问题,指出 std::priority_queue
最可能仅用于单个值而不是映射值。阅读上面的链接后,我使用与链接中其他问题类似的优先队列重新实现了它。 我的运行时间似乎不那么不平等(在1000万个元素上大约需要一个小时)。 现在我想知道为什么
std::priority_queue
总体上更快。实际上,我期望
std::multimap
更快,因为有许多重新插入。
也许问题在于 multimap 的重新组织过于频繁?
int,T
对容器,旨在选择极端的int
。它的约束较少。我希望它能更快一些。你的multimap中的键是否像链接问题中的那样是队列中的优先级?我理解得对吗? - luk32