STL优先级结构队列无法正常工作

时间:2016-06-29 00:43:22

标签: c++ struct stl priority-queue

我在尝试将结构放入优先级队列时遇到问题,如下图所示,它没有按分数正确组织,它应该由最大数字组织。

最小代码:

Class foo{
        public:
        foo();
        // this is in the .h file
        struct individuo{
            individuo(){}
            individuo(QColor cor): gene(cor){}
            QColor gene;
            int score;
            int probabilidade;
            int epoca;
        };

        // this is in the .h file
        struct Comparador{
          bool operator()(const individuo* arg1,const individuo* arg2) const {
            return arg1->score < arg2->score;
          }
        };
        void function();
        priority_queue<individuo *,vector<individuo *>, Comparador> individuos;
};

    void foo::function(){
            individuo *a = new individuo(QColor(r,g,b));
            a->score = rand() % 255;
            individuos.push(a);
    }

以及它在内存中的组织方式:

memory

有可能看到结构的分数没有正确组织,为什么?

2 个答案:

答案 0 :(得分:2)

如果您只想按分数对individuo struct进行排序,请使用std :: map并将分数作为关键字。 priority_queue用于其他目的。

  

优先级队列是一个容器适配器,它以对数插入和提取为代价,提供最大(默认情况下)元素的常量时间查找。

编辑:或者,只需将结构放在std::vectorstd::array中,然后使用std::sort

答案 1 :(得分:0)

优先级队列由于某种原因没有迭代元素的接口,它与它提供的核心服务无关。屏蔽实现可以提供更有效的选择。

只有std::priority_queue公开push/pop/top,因此可以用堆来实现它。使用std::push_heapstd::pop_heap优先于std::vector进行重写,并且无需维护完整有序的元素列表来提供服务。