C++ 结构的STL优先级队列未正确工作

C++ 结构的STL优先级队列未正确工作,c++,struct,stl,priority-queue,C++,Struct,Stl,Priority Queue,我在尝试将结构放入优先级队列时遇到问题,它没有按下图所示的分数正确组织,它应该按最大的数字组织 最小代码: Class foo{ public: foo(); // this is in the .h file struct individuo{ individuo(){} individuo(QColor cor): gene(cor){} QColor ge

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

最小代码:

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);
    }
Class-foo{
公众:
foo();
//这在.h文件中
独立结构{
独立({}
个体(QColor cor):基因(cor){}
QColor基因;
智力得分;
int概率;
int epoca;
};
//这在.h文件中
结构比较器{
布尔运算符(){
返回arg1->scorescore;
}
};
空函数();
优先队列;
};
void foo::function(){
individuo*a=新的individuo(QColor(r,g,b));
a->score=rand()%255;
个人推送(a);
}
这就是它在内存中的组织方式:


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

如果您只想按分数对
IndividDuo结构进行排序,请使用std::map并将分数作为键。优先级队列用于不同的目的

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


编辑:或者,只需将结构放在
std::vector
std::array
中,并在其上使用
std::sort

优先级队列没有迭代元素的接口,因为它与它提供的核心服务无关。掩蔽实现允许更有效的选择


std::priority_队列
仅公开
push/pop/top
,因此可以使用堆实现它。它可以通过
std::push_heap
std::pop_heap
std::vector
上轻松重写,并且不需要维护提供服务的元素的完全有序列表

您的示例当然很少,但还远远不够完整,而且无法验证。请编辑您的问题,并包括一个。
优先级\u队列
无法保持容器排序。它只保证前面的元素是最大的。@SamVarshavchik我很快修复了代码另一个同样有用的选项是
std::set
如果您不想查找键值对。map和set需要唯一的值,我将使用multimap,但是谢谢您展示
std::multiset