Использование списка пользовательских типов для базового контейнера приоритетной очереди - PullRequest
2 голосов
/ 22 декабря 2011

Мой квест продолжается! Я начал использовать список для своей приоритетной очереди

std::priority_queue<charElement,std::list<charElement>,compareCharElt> Q_freqDistribution;

, где charElement не (из-за этой ошибочной компиляции) не перегружает оператор '-'

Когда я получил эту ошибку:

std::_List_unchecked_iterator<_Mylist>' does not define this operator or a conversion to a type acceptable to the predefined operator *

Я посмотрел на это, и из того, что я понял, мне показалось, что для того, чтобы я мог использовать список (я предполагаю, что итератор сможет обходить элементы), мне нужно было перегрузить оператор '-', так я и сделал, вот заголовок метода:

void operator-(charElement&);

В этот момент я просто хотел, чтобы фиктивный оператор удостоверился, что то, что я понял, было правильно, к сожалению, я ошибаюсь, я искал какое-то время об этом сейчас и, похоже, не могу определить проблему , кто-нибудь может помочь?

1 Ответ

2 голосов
/ 22 декабря 2011

Базовый контейнер для priority_queue должен быть контейнером последовательности с итераторами произвольного доступа (и операциями front(), push_back() и pop_back()).list имеет двунаправленные итераторы, а не итераторы произвольного доступа, поэтому вы не можете использовать его здесь.

Вы можете использовать vector (по умолчанию), deque или любой нестандартный контейнер, который соответствуетэти требования.

Вам не нужно перегружать operator- для вашего типа;компилятор жалуется, что operator- не перегружен для list::iterator.Единственное требование к типу состоит в том, что его можно сравнить с другими значениями этого типа;в вашем случае вы предоставляете специальный компаратор для этого.

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