【问题标题】:priority queue in stlstl中的优先级队列
【发布时间】:2011-10-12 02:05:17
【问题描述】:

我按照article 编写了一个使用stl 的priority_queue 的hanffman 编码方法,但是我认为最终代码中存在一些错误或者它没有更新。主要问题是priority_queue的声明,我认为它应该采用三个参数,例如:priority_queueq,而不是priority_queue,greater>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’

我不明白。完整代码在here

【问题讨论】:

    标签: c++ stl priority-queue


    【解决方案1】:

    您需要为您的班级定义一个operator&gt;(),因为您使用std::greater&lt;&gt; 作为priority_queue 中的比较。我在代码中看到的唯一运算符是operator&lt;()

    【讨论】:

      【解决方案2】:

      您缺少节点的&gt; 运算符的定义(您只定义了&lt; 运算符)。

      【讨论】:

        猜你喜欢
        • 2016-04-13
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        相关资源
        最近更新 更多