小编Joh*_*hny的帖子

为什么使用std :: multiset作为优先级队列比使用std :: priority_queue更快?

我尝试用std :: priority_queue替换std :: multiset。但是我对速度结果感到失望。该算法的运行时间增加了50%...

以下是相应的命令:

top() = begin();
pop() = erase(knn.begin());
push() = insert();
Run Code Online (Sandbox Code Playgroud)

我对priority_queue实现的速度感到惊讶,我预期会有不同的结果(对于PQ更好)...从概念上讲,多集被用作优先级队列。为什么优先级队列和多重集即使在情况下也具有如此不同的性能-O2

十个结果的平均值,MSVS 2010,Win XP,32位,方法findAllKNN2()(请参见下面的内容)

MS
N           time [s]
100 000     0.5
1 000 000   8

PQ
N           time [s]
100 000     0.8
1 000 000   12
Run Code Online (Sandbox Code Playgroud)

什么会导致这些结果?尚未对源代码进行其他更改...感谢您的帮助...

MS实施:

template <typename Point>
struct TKDNodePriority
{
    KDNode <Point> *node;
    typename Point::Type priority;

    TKDNodePriority() : node ( NULL ), priority ( 0 ) {}
    TKDNodePriority ( KDNode <Point> *node_, typename Point::Type priority_ ) : node ( …
Run Code Online (Sandbox Code Playgroud)

c++ performance priority-queue multimap multiset

9
推荐指数
3
解决办法
3609
查看次数

抽象类,复制构造函数

在具有纯虚方法的类中或仅在派生类中定义复制构造函数/ operator =是否有意义?

c++ abstract-class copy-constructor

4
推荐指数
3
解决办法
1万
查看次数