C++ stl中的优先级队列

C++ stl中的优先级队列,c++,stl,priority-queue,C++,Stl,Priority Queue,我使用stl的priority_队列编写了一个hanffman编码方法,但是我认为最终的代码中有一些错误,或者没有更新。主要问题是优先级队列的声明,我认为它应该采用三个参数,比如:优先级队列q,而不是优先级队列,更大>q。 但是,即使进行了这些更改,gcc编译器仍会出现如下错误: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h: In member functio

我使用stl的priority_队列编写了一个hanffman编码方法,但是我认为最终的代码中有一些错误,或者没有更新。主要问题是优先级队列的声明,我认为它应该采用三个参数,比如:优先级队列<节点,向量,更大>q,而不是优先级队列,更大>q。 但是,即使进行了这些更改,gcc编译器仍会出现如下错误:

  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h: In member function ‘bool std::greater<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = node]’:
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h:279:   instantiated from ‘void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<node*, std::vector<node, std::allocator<node> > >, _Distance = long int, _Tp = node, _Compare = std::greater<node>]’
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h:404:   instantiated from ‘void std::make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<node*, std::vector<node, std::allocator<node> > >, _Compare = std::greater<node>]’
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_queue.h:367:   instantiated from ‘std::priority_queue<_Tp, _Sequence, _Compare>::priority_queue(const _Compare&, const _Sequence&) [with _Tp = node, _Sequence = std::vector<node, std::allocator<node> >, _Compare = std::greater<node>]’ hanffman.cpp:119:   instantiated from here
  /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h:218: error: no match for ‘operator>’ in ‘__x > __y’
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../include/c++/4.1.2/bits/stl_function.h:在成员函数“bool std::greater::operator()(const _Tp&,const _Tp&)const[with _Tp=node]”中:
/usr/lib/gcc/x86\u 64-redhat-linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/stl\u heap.h:279:从“void std:”实例化:“\u adjust\u heap(\u RandomAccessIterator,\u Distance,\u Distance,\u Tp,\u Compare)[with\u RandomAccessIterator=\u gnu cxx::\u normal\u迭代器,\u Distance=long int,\u节点,\u Compare std::更大]”
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../../include/c++/4.1.2/bits/stl_heap.h:404:从“void std::make_heap(_RandomAccessIterator,_RandomAccessIterator,_Compare,_Compare)[with _RandomAccessIterator=u gnu cxx::u normal迭代器,Compare=std::greer]实例化
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../include/c++/4.1.2/bits/stl_queue.h:367:从“std::priority_queue::priority_queue(const _Compare&,const _Sequence&)”实例化[with _Tp=node,_Sequence=std::vector,_Compare=std::greater]“hanffman.cpp:119:从此处实例化
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../../../include/c++/4.1.2/bits/stl_函数。h:218:错误:与“\uuu x>\uu y”中的“operator>”不匹配

我不明白。完整代码可用

您需要为您的类定义一个
操作符>()
,因为您正在使用
std::greater
作为
优先级队列中的比较。我在代码中看到的唯一操作符是
操作符您需要为您的类定义
操作符()
,因为您正在使用
std::greater
作为
优先级队列中的比较。我在代码中看到的唯一操作符是
操作符您缺少节点的
操作符的定义(您只定义
您缺少节点的
操作符的定义(您只定义