为什么我的代码使用priority_queue不能编译
Why my code using priority_queue cannot compile?
尝试使用priority_queue。代码是:
struct HeapNode
{
int val;
int row;
int col;
HeapNode(int a, int b, int c) : val(a), row(b), col(c) {}
};
class MyComparator
{
public:
bool operator()(HeapNode &n1, HeapNode &n2)
{
return n1.val < n2.val;
}
};
void myfunction()
{
std::priority_queue<HeapNode, std::vector<HeapNode>, MyComparator> hp1; //LINE1
std::priority_queue<HeapNode, MyComparator> hp2; //LINE2
}
尝试了LINE1和LINE2所示的两种方法。
std::priority_queue在构造函数中接受3个参数:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
在您的例子中LINE1看起来很好,应该可以编译。错误消息是什么?
在LINE2你试图创建std::priority_queue自定义类型(HeapNode)与容器"MyComparator"(不是容器!)。
http://en.cppreference.com/w/cpp/container/priority_queue用于存储元素的底层容器的类型。的容器必须满足SequenceContainer的要求。此外,它还必须提供下列功能语义:front(), push_back(), pop_back()。标准容器Std::vector和Std::deque满足这些要求。
"MyComparator"不是一个容器,它不支持必需的方法。
我检查了你的代码LINE2注释掉,它编译。你算上和了吗?有main函数吗?
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么虚函数不能是静态的和全局的?
- 为什么我不能在 while 循环中创建线程?
- 为什么这个音频包络不能通过开关的情况?
- 不能将变量'x'声明为抽象类型 'Queue<int>'