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

C++ 使用优先级队列初始化向量,c++,vector,initialization,priority-queue,C++,Vector,Initialization,Priority Queue,我在一本关于算法的书中发现了类似于下面的代码。代码尝试从max_堆的当前状态初始化向量。但是,Xcode(7.3)中的以下代码会产生编译时错误: 没有用于“vector”初始化的匹配构造函数 //声明优先级队列 优先级队列最大堆; //将/弹出到堆中/从堆中弹出 //用堆初始化向量 向量最接近星(最大堆); 不是这本书错了,就是我做错了什么。在前一种情况下,是否有正确的方法从STL优先级队列的底层容器初始化向量?本书可能假设priority\u queue是std::vector的子类 C+

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

没有用于“vector”初始化的匹配构造函数

//声明优先级队列
优先级队列最大堆;
//将/弹出到堆中/从堆中弹出
//用堆初始化向量
向量最接近星(最大堆);

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

本书可能假设
priority\u queue
std::vector
的子类

C++标准不保证.</P> 一旦构建,

priority\u queue
就不提供对底层容器的
public
访问,因此您无法从中初始化
std::vector


但是,显然,您可以做的是对
std::priority_队列
进行子类化,子类显然可以访问继承的
受保护的
成员
c
,该成员应该是底层的
std::vector
,这本书可能假设
priority\u queue
std::vector
的一个子类

C++标准不保证.</P> 一旦构建,

priority\u queue
就不提供对底层容器的
public
访问,因此您无法从中初始化
std::vector

但是,显然,您可以做的是对
std::priority_队列
进行子类化,子类显然可以访问继承的
受保护的
成员
c
,该成员应该是底层的
std::vector
,您可以使用该子类来复制和构造另一个向量

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


// pushing/popping to/from heap

// initializing vector with heap
vector<Star> closestStars(max_heap);