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

Posted

技术标签:

【中文标题】具有自定义比较功能的 C++ 优先级队列在 Push() 上行为不正确【英文标题】:C++ Priority Queue with Custom Compare Function not Behaving Correctly on Push() 【发布时间】:2017-11-02 03:19:07 【问题描述】:

我已经定义了一个这样的 C++ 优先级队列:

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

使用这样的自定义 mygreater function():

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);

可能有人知道是什么导致我尝试推送到优先级队列时出现错误吗?任何帮助是极大的赞赏。

【问题讨论】:

您目前如何将整数对向量推入队列? 基本上是这样的:temp.push_back(make_pair(sr,sc)); frontier.push(temp); 【参考方案1】:

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

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

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

【讨论】:

谢谢!我没有意识到在我的声明中,vector> 部分只是定义了队列本身的底层容器。第一个参数实际上应该是一个向量。感谢您的帮助!

以上是关于具有自定义比较功能的 C++ 优先级队列在 Push() 上行为不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义比较器声明 C++ 优先级队列的问题

优先队列的自定义比较功能

优先队列比较

优先队列比较

c++优先队列(priority_queue)用法详解

C++优先队列(priority_queue)