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