在优先级队列中推送元素时,二进制表达式的操作数无效 我是C++编程新手。我必须创建一个名为Container的类的优先级队列。所以我这样写:

在优先级队列中推送元素时,二进制表达式的操作数无效 我是C++编程新手。我必须创建一个名为Container的类的优先级队列。所以我这样写:,c++,c++11,priority-queue,c++-standard-library,C++,C++11,Priority Queue,C++ Standard Library,在main.cpp: struct Comp{ bool operator() (const Container& a, const Container& b){ return a<b; } }; std::priority_queue<Container, std::list<Container>, Comp> containers; class Container{ public: friend bo

在main.cpp:

struct Comp{
    bool operator() (const Container& a, const Container& b){
        return a<b;
    }
};

std::priority_queue<Container, std::list<Container>, Comp> containers;

class Container{
public:
    friend bool operator< (const Container& a, const Container& b);
    //...
};

bool operator<(const Container &a, const Container &b) {
    return a.y<b.y;
}

struct Comp{
布尔运算符()(常量容器和a、常量容器和b){

返回一个它告诉您您的It无法计算两个
list::interator类型的迭代器之间的差

如果您查看
priority\u queue
的要求,它会说容器的迭代器“必须满足LegacyRandomAccessIterator的要求。”

list
s迭代器不是随机访问;它们是双向的。因此,不能将
list
用作
优先级队列的底层容器

简单修复:使用
deque
而不是
列表


std::priority\u queue containers;

它告诉您,您的It无法计算两个类型为
list::interator
的迭代器之间的差异

如果您查看
priority\u queue
的要求,它会说容器的迭代器“必须满足LegacyRandomAccessIterator的要求。”

list
s迭代器不是随机访问;它们是双向的。因此,不能将
list
用作
优先级队列的底层容器

简单修复:使用
deque
而不是
列表

std::priority\u队列容器;

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);