我的任务仍在继续!我开始使用列表作为我的优先级队列
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&);
此时我只想要一个虚拟算子来确保我理解的是正确的,遗憾的是,我错了,我现在一直在寻找这个问题,我似乎无法确定问题所在,任何人都可以帮忙吗?
答案 0 :(得分:2)
priority_queue
的基础容器必须是具有随机访问迭代器(以及front()
,push_back()
和pop_back()
操作)的序列容器。 list
具有双向迭代器,而不是随机访问迭代器,因此您无法在此处使用它。
您可以使用vector
(默认值),deque
或符合这些要求的任何非标准容器。
您不需要为您的类型重载operator-
;编译器抱怨operator-
没有超载list::iterator
。该类型的唯一要求是它可以与该类型的其他值进行比较;在您的情况下,您将为此提供自定义比较器。