版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文已经发布在我的个人网站 jerrydeng.site 上啦,欢迎访问!
C++ 的 std::priority_queue
没有查找的功能,但某些情况下又确实需要使用查找,这里介绍一下查找功能的简单实现方法:
#include <queue>
/* 自定义类实现对于 STL 的优先队列的查找方法 */
template<class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type> >
class My_Priority_Queue : public std::priority_queue<T, Container, Compare>
{
public:
typedef typename std::priority_queue<T, Container, Compare>::container_type::const_iterator const_iterator;
/* 查找队列中是否存在 t,若存在则返回指向该元素的迭代器,否则返回 std::priority_queue::c.cend() */
const_iterator find(const T &t) const
{
auto first = this->c.cbegin();
auto last = this->c.cend();
while (first != last)
{
if (*first == t)
return first;
++first;
}
return last;
}
};
/* 用法,Node 为自定义类型 */
My_Priority_Queue<Node> my_queue;