#c #c 11 #priority-queue #c -standard-library
Вопрос:
Я новичок в программировании на c . Я должен создать приоритетную очередь класса с именем Контейнер. Поэтому я написал так:
В main.cpp:
struct Comp{
bool operator() (const Containeramp; a, const Containeramp; b){
return a<b;
}
};
std::priority_queue<Container, std::list<Container>, Comp> containers;
В Container.cpp:
class Container{
public:
friend bool operator< (const Containeramp; a, const Containeramp; b);
//...
};
bool operator<(const Container amp;a, const Container amp;b) {
return a.y<b.y;
}
Я не знаю, почему, даже если я объявил:
error: invalid operands to binary expression ('std::__1::__list_iterator<Container, void *>' and 'std::__1::__list_iterator<Container, void *>')
__sift_up<_Comp_ref>(__first, __last, __comp, __last - __first);
Как я могу это решить ? Я действительно не знаю, что происходит 🙁
Ответ №1:
Это говорит вам о том, что ваш ит не может вычислить разницу между двумя итераторами типа list<Container>::interator
.
Если вы посмотрите на требования для priority_queue
CppReference, в нем говорится, что итераторы для контейнера «должны удовлетворять требованиям LegacyRandomAccessIterator».
Простое исправление: используйте a deque
вместо a list
.
std::priority_queue<Container, std::deque<Container>, Comp> containers;