C++ 具有自定义比较函数的优先级队列在 push() 上行为不正确

C++ Priority Queue with Custom Compare Function not Behaving Correctly on Push()

本文关键字:push 不正确 队列 自定义 比较 函数 优先级 C++      更新时间:2023-10-16

我定义了一个C++优先级队列,如下所示:

priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(&mygreater)> frontier(&mygreater);

使用像这样的自定义 myGreater 函数():

bool mygreater(pair<int,int> v1, pair<int,int> v2) {
        return v1.first > v2.first;
}

但是,当我尝试将整数对的向量推送到优先级队列时,我不断收到大量错误,包括:

error: no matching function for call to ‘std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int> >, bool (*)(std::pair<int, int>, std::pair<int, int>)>::push(std::vector<std::pair<int, int> >&)’ frontier.push(temp);

有谁知道是什么导致了我尝试推送到优先级队列时出现的错误?任何帮助将不胜感激。

此错误与您的自定义比较无关。如果这样做,您会收到相同的错误:

std::priority_queue<int> q;
std::vector<int> v;
q.push(v);

std::priority_queue::push 采用您存储的任何类型的单个对象,而不是它们的整个向量。您存储的类型是 pair<int,int> ,但您正在尝试推送vector<pair<int,int>>