使用优先级队列的基础容器的自定义类型列表

时间:2011-12-22 16:52:29

标签: c++ list priority-queue

我的任务仍在继续!我开始使用列表作为我的优先级队列

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 个答案:

答案 0 :(得分:2)

priority_queue的基础容器必须是具有随机访问迭代器(以及front()push_back()pop_back()操作)的序列容器。 list具有双向迭代器,而不是随机访问迭代器,因此您无法在此处使用它。

您可以使用vector(默认值),deque或符合这些要求的任何非标准容器。

您不需要为您的类型重载operator-;编译器抱怨operator-没有超载list::iterator。该类型的唯一要求是它可以与该类型的其他值进行比较;在您的情况下,您将为此提供自定义比较器。