Очередь приоритетов C++ не сортируется

Я пытался реализовать приоритетную очередь в C++ с помощью пользовательской структуры Class и Compare, но всякий раз, когда я нажимаю новый элемент, очередь не сортируется сама.

В заголовке:

private:
    std::priority_queue<Node*, std::vector<Node*>, NodeCompare> queue;

Struct:

struct NodeCompare
{
    bool operator()(Node* n1, Node* n2) 
    {
        int val1 = n1->getValue();
        int val2 = n2->getValue();
        return val1 < val2;
    }
};

В классе:

Node* node = new Node(nrInTree, value);
queue.push_back(node);

Есть идеи?

1 ответ

Решение

Ваш код правильный. Но я думаю, что у вас здесь недоразумение. Потому что priority_queue реализован с использованием кучи структуры данных. Как известно, куча не отсортирована. Он обладает только тем свойством, что максимальный элемент находится спереди. Каждый раз, когда вы вставляете элемент в кучу, куча будет использовать время O(lgN), чтобы протолкнуть максимум вперед. И каждый раз, когда вы выталкиваете элемент, будет получен самый большой элемент. Но куча вообще не сортируется.

Другие вопросы по тегам