创建优先级队列 - C++

creation of priority queue - c++

我想创建一个通用优先级队列。是的,我知道这可以通过 STL 实现,但我仍然没有完全理解它,这就是为什么我想自己构建一个。 当我说 general 时,我的意思是它在某种意义上对 int、string、any class 等都是一样的。 我知道 Queue 中的每个项目都需要至少有 2 个字段: 1.价值 2. 优先权 所以我认为只有我的值字段应该是一个模板,但我发现没有这样的选项。 我在这里有点迷失了我应该在哪里找到模板以及之后如何使用它。

编辑1: 第 1 条 2 条评论说我的问题太宽泛,所以我会尽量缩小范围。 假设我开始了我的 PQ:

template <class T>
class Stack
{
public: 
int priority
template <t> value
Stack(s); //Ctor
}

这段代码是我与之抗争的方式 应该编写但无法编译。 另外,如果我在 class 中有方法,我是否需要在每个方法的每次实现之前编写:

 template<class T>

或者也许我可以使用 :

Stack<T>::Stack(int s) //Ctor

如果您查看 std::priority_queue<T, C, P>,您会发现它需要三个模板参数:

  1. 值类型T.
  2. 底层容器的类型C(默认为std:vector<T>)。
  3. 二元谓词 P 定义类型 T 元素的优先顺序(默认为 std::less<...>)。

也就是说,您只需存储任何需要存储的内容,并使用二元谓词定义优先级。如果您想存储具有单独优先级的 int 对象,您可以存储一个 std::pair<int, priority_type> 并提供一个二进制谓词来比较这些对的 second 元素。

我知道你想自己实现优先级队列,但我会完全遵循标准库模型(好吧,我会向前移动谓词并可能省略底层容器的定制)。