创建优先级队列 - 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>
,您会发现它需要三个模板参数:
- 值类型
T
.
- 底层容器的类型
C
(默认为std:vector<T>
)。
- 二元谓词
P
定义类型 T
元素的优先顺序(默认为 std::less<...>
)。
也就是说,您只需存储任何需要存储的内容,并使用二元谓词定义优先级。如果您想存储具有单独优先级的 int
对象,您可以存储一个 std::pair<int, priority_type>
并提供一个二进制谓词来比较这些对的 second
元素。
我知道你想自己实现优先级队列,但我会完全遵循标准库模型(好吧,我会向前移动谓词并可能省略底层容器的定制)。
我想创建一个通用优先级队列。是的,我知道这可以通过 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>
,您会发现它需要三个模板参数:
- 值类型
T
. - 底层容器的类型
C
(默认为std:vector<T>
)。 - 二元谓词
P
定义类型T
元素的优先顺序(默认为std::less<...>
)。
也就是说,您只需存储任何需要存储的内容,并使用二元谓词定义优先级。如果您想存储具有单独优先级的 int
对象,您可以存储一个 std::pair<int, priority_type>
并提供一个二进制谓词来比较这些对的 second
元素。
我知道你想自己实现优先级队列,但我会完全遵循标准库模型(好吧,我会向前移动谓词并可能省略底层容器的定制)。