gpt4 book ai didi

c++ - 初始化并插入优先级队列 (C++)

转载 作者:行者123 更新时间:2023-11-30 02:48:49 27 4
gpt4 key购买 nike

我以前从未使用过 STL C++ 优先级队列,我发现网站上的详细信息有点令人困惑。

我想创建一个节点优先级队列,我将其定义为:

struct Node {
string data;
int weight;
Node *left, *right;
}

我还根据节点的权重按升序插入队列。但是,我不知道最终的 PQ 中会有多少个节点。

我对使用哪个构造函数来创建 PQ 感到困惑。目前,我有:

std::priority_queue<Node> myQueue;

但是因为我希望队列根据节点的权重排序,我应该使用构造函数吗:

priority_queue (const Compare& comp, const Container& ctnr);

那行得通吗?在那种情况下,ctnr 会“节点”吗?

最后,当我想将一个元素插入 priority_queue 时(使用 STL priority_queue::push),该元素会自动放置在正确的位置吗?

谢谢。

最佳答案

初始化不决定优先级队列如何操作。如果您希望它以特定方式排序,您有两种选择。

第一个选项是定义 <您的 Node 上的接线员对象以您想要的方式比较它们。

struct Node {
string data;
int weight;
Node *left, *right;
bool operator<(const Node& n) const {
return weight < n.weight;
// or "weight > n.weight" if you want the smallest weight at the top
}
};
std::priority_queue<Node> myQueue;

第二个选项是定义自定义比较器类型并将其指定为模板参数:

struct NodeComp {
bool operator()(const Node& n1, const Node& n2) const {
return n1.weight < n2.weight;
// or "n1.weight > n2.weight" if you want the smallest weight at the top
}
};
std::priority_queue<Node, std::vector<Node>, NodeComp> myQueue;

关于c++ - 初始化并插入优先级队列 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804328/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com