【发布时间】:2014-01-09 14:01:03
【问题描述】:
我已经阅读了 C++ 参考手册,但仍然不清楚如何在 STL 中使用 priorityqueue 数据结构。
所以,基本上我一直在尝试使用堆来实现我自己的。
我这样做是为了实现 Prim 的算法。
Vector <int, int> pq;
这是我的优先队列。第一个字段是节点,第二个字段是现有树的权重。
我计划在每次将新节点添加到树中时通过更新其相邻节点的权重来修改 pq 中的权重值。
- 如何访问该向量的各个元素?我还需要能够随意删除元素。
这是实现优先级队列的好方法吗?如果我想在容器中添加另一个字段,即
Vector<int, int, int> MST
- 如何访问第三个元素?我想以这种方式存储生成的 MST,以便前两个字段表示形成边缘的顶点,第三个字段表示权重。
如果有人能告诉我如何使用 push_back 将元素分配给该向量,那也会有所帮助。
另外,传统的 C++ STL 优先级队列会对此有所帮助吗,因为每次向 MST 添加新元素时我都需要更新优先级值?修改值时会根据优先级自行更正吗?
另一个问题,这些向量,当我将它们传递给函数并尝试进行更改时,它是按值传递还是按引用传递 - 或者,这些更改是否反映在函数外部?
【问题讨论】:
-
你是指古老过时的ARM与“C++参考手册”吗?
-
如果你的意思是
std::vector和Vector,STL 向量可能只有一个元素类型的模板参数(实际上它也有分配器模板参数)。您可以使用std::vector<std::pair<int,int>>来代替您的目的。 cplusplus.com/reference/vector/vector -
@PlasmaHH :我实际上是指 cplusplus.com 站点作为参考。我认为这是合法的:)
-
@vard:是的。我的意思是 std::vector。好吧,我需要同时添加边缘和重量,并且能够单独访问要打印的元素。
-
@Floose 实际上你想要索引优先级队列,对吗?