我在一本关于算法的书中找到了类似下面的代码。该代码尝试从 max_heap 的当前状态初始化一个 vector 。但是,Xcode (7.3) 中的以下代码会产生编译时错误:
No Matching Constructor for initialization of '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);
要么书有误,要么我做错了什么。在前一种情况下,是否有正确的方法从 STL 优先级队列的底层容器初始化 vector ?
最佳答案
这本书可能假定 priority_queue
是 std::vector
的子类。
C++ 标准不保证这一点。
一旦构建,priority_queue
不提供对底层容器的public
访问,因此您不能从中初始化std::vector
。
但是,显然,您可以做的是子类化您的 std::priority_queue
,该子类显然可以访问继承的 protected
成员 c
,它应该是底层的 std::vector
,您可以使用它来复制构造另一个 vector 。
关于c++ - 使用优先级队列初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709500/