c++ - 带有列表容器的优先级队列

标签 c++ list priority-queue

我正在尝试使用列表作为包含数据节点对象的优先级队列的底层容器。使用 vector 或 deque 似乎工作正常,但我尝试使用列表作为底层容器,我尝试将某些内容推到队列中,但出现错误:

错误 3 错误 C2784:“未知类型 std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)”:无法推断“std::move_iterator”的模板参数<_RanIt> &' 来自 'std::_List_unchecked_iterator>>'

struct datanode{
    int depth;
    int cost;
    const int SIZE = 10;
    int ident[9];   
    int parent;
    datanode(int dep, int id[9], int);
    datanode(int dep, int id[9], int, int);
    datanode(const datanode&);
    datanode(); 
    datanode& datanode::operator=(const datanode&);
};

class NodeComparison
{
  public:
    bool operator() (datanode& da, datanode& db)
    {
        return da.cost > db.cost;
    }
};

int main(){
    std::priority_queue<datanode,list<datanode>, NodeComparison> PQueue;
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    datanode d(0,a,0);
    PQueue.push(d);
 }

最佳答案

§23.6.4 [priority.queue]/p1:

Any sequence container with random access iterator and supporting operations front(), push_back() and pop_back() can be used to instantiate priority_queue.

std::list 没有随机访问迭代器。

关于c++ - 带有列表容器的优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25877436/

相关文章:

java - PriorityQueue 类的标准行为是什么?

java - 插入优先队列

c++ - 捕捉信号并向用户报告问题的便携方式

c++ - 将 Doxygen 用于 Visual Studio 2008 项目

list - 如何在Prolog中找到列表的第N个元素

algorithm - 在 Erlang 中将平面列表转换为一组二元组的最佳方法?

c++ - 如何在 std::priority_queue 的仿函数中传输附加对象?

c++ - 如何使用 std::distance 查找指向 std::array 元素的指针的数组索引?

c++ - 双向链表 - 是什么导致我的代码抛出编译器错误,我该如何解决?

python - 将列表中所有元素相加但不包括第一个偶数的函数