【问题标题】:std::priority_queue with std::pair<int, int>std::priority_queue 与 std::pair<int, int>
【发布时间】:2017-02-07 21:10:29
【问题描述】:

您好,我有以下代码:

#include <algorithm>
#include <queue>
#include <functional>
std::priority_queue < std::pair<int, int>, std::greater<std::pair<int, int> > > q;

我正在尝试使用最小堆功能。 我已经搜索了几个小时仍然无法得到明确的答案。 我见过很多人编写自定义比较函数,但我认为这是非常标准的操作。如果我取出 std::greater func 一切都按预期工作,但它会创建一个最大堆。

编译时出现 14 个错误。

Error   C2039   'value_type': is not a member of 'std::greater<std::pair<int,int>>' 
Error   C2146   syntax error: missing '>' before identifier 'value_type'    
Error   C2039   'value_type': is not a member of 'std::greater<std::pair<int,int>>' 
Error   C3646   'value_type': unknown override specifier    
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    
Error   C2039   'size_type': is not a member of 'std::greater<std::pair<int,int>>'  
Error   C3646   'size_type': unknown override specifier     
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    
Error   C2039   'reference': is not a member of 'std::greater<std::pair<int,int>>'  
Error   C3646   'reference': unknown override specifier
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    
Error   C2039   'const_reference': is not a member of 'std::greater<std::pair<int,int>>'    
Error   C3646   'const_reference': unknown override specifier   
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int

【问题讨论】:

  • 你看std::priority_queue的文档了吗?您正在尝试将 std::greater 作为 Container 传递,而不是作为比较器。

标签: c++ c++11 priority-queue std-pair


【解决方案1】:

priority_queue 的第二个模板参数是要使用的底层容器类型,而不是要使用的比较运算符。默认为std::vector&lt;T&gt;,您可以明确指定:

typedef std::pair<int, int> QueueItem;
std::priority_queue <QueueItem, std::vector<QueueItem>, std::greater<QueueItem> > q;

【讨论】:

  • 非常感谢马克。就是它。
  • using QueueItem = std::pair&lt;int, int&gt;;更好
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2021-03-19
  • 2015-08-18
相关资源
最近更新 更多