очередь с приоритетами в stl - PullRequest
0 голосов
/ 12 октября 2011

Я следовал статье , чтобы кодировать метод кодирования Хэнфмана с использованием приоритета stl, однако я думаю, что в конечном коде есть ошибки или он не обновлен. Основной проблемой является объявление priority_queue, я считаю, что оно должно принимать три параметра, таких как: priority_queue <узел, вектор, больше> q, вместо priority_queue, больше> 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’

что я не понимаю. Полный код доступен здесь

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Вам нужно определить operator>() для вашего класса, потому что вы используете std::greater<> в качестве сравнения в priority_queue. Единственный оператор, который я видел в коде, был operator<().

0 голосов
/ 12 октября 2011

Вам не хватает определения оператора > для узла (вы определяете только оператор <).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...