使用优先级队列初始化向量

Initializing a vector with a priorityqueue

本文关键字:初始化 向量 队列 优先级      更新时间:2023-10-16

我在一本关于算法的书中找到了类似于以下内容的代码。 该代码尝试从max_heap的当前状态初始化向量。 但是,Xcode (7.3) 中的以下代码会产生编译时错误:

没有用于初始化"向量"的匹配构造函数

// declaring priority queue
priority_queue<Star, vector<Star>> max_heap;

// pushing/popping to/from heap
// initializing vector with heap
vector<Star> closestStars(max_heap);

要么这本书有误,要么是我做错了什么。 在前一种情况下,是否有正确的方法可以从 STL 优先级队列的底层容器初始化向量?

这本书可能假设priority_queuestd::vector的一个子类。

C++标准不能保证这一点。

构造后,priority_queue不提供对基础容器的public访问,因此无法从中初始化std::vector

然而,显然,你可以做的是子类化你的std::priority_queue,子类显然可以访问继承的protected成员c,这应该是底层std::vector,你可以用它来复制构造另一个向量。