priority_queue 自定义Comp类

定义

// https://github.com/microsoft/STL/blob/main/stl/inc/queue
// CLASS TEMPLATE priority_queue
template <class _Ty, class _Container = vector<_Ty>, class _Pr = less<typename _Container::value_type>>
class priority_queue {
   
public:
	/* ...... */
	priority_queue() = default;					// 默认构造函数
	explicit priority_queue(const _Pr& _Pred) noexcept(
        is_nothrow_default_constructible_v<_Container>&& is_nothrow_copy_constructible_v<value_compare>) // strengthened
        : c(), comp(_Pred) {
   }
	/* ...... */
protected:
    _Container c{
   };
    _Pr comp{
   };
};</
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
priority_queue是一个标准库中的容器,用于实现堆结构。在priority_queue中,通过指定第三个模板参数来自定义比较方式。这个参数通常是一个函数对象(也称为仿函数)或者一个函数指针。比较方式决定了元素在堆中的排序规则。 如果不指定第三个模板参数,默认情况下,priority_queue使用std::less作为比较方式,即使用<运算符进行元素之间的比较。这意味着在默认情况下,priority_queue会按照递增顺序维护元素,最小的元素位于堆顶部。 如果我们想要自定义比较方式,可以提供一个自定义函数对象或者函数指针作为第三个模板参数。这个函数对象或者函数指针需要满足严格弱序关系,并且与容器中元素的型兼容。 举个例子,假设我们有一个自定义MyClass,我们想要根据该的某个成员变量进行排序。我们可以自定义一个函数对象或者函数指针,来实现根据该成员变量进行比较的逻辑。然后将该函数对象或者函数指针作为第三个模板参数传递给priority_queue。 下面是一个示例代码,展示了如何自定义比较方式来实现根据MyClass的某个成员变量进行排序: ```cpp struct MyComparator { bool operator()(const MyClass& a, const MyClass& b) { return a.someMember < b.someMember; } }; priority_queue<MyClass, vector<MyClass>, MyComparator> pq; ``` 在上面的示例中,我们定义了一个名为MyComparator的结构体,其中重载了()运算符。在这个运算符函数中,我们根据MyClass的某个成员变量someMember来进行比较。然后,我们将MyComparator作为第三个模板参数传递给priority_queue,以便使用我们自定义的比较方式。 总结一下,通过自定义第三个模板参数,我们可以实现priority_queue自定义比较方式。这使得priority_queue可以适应各种不同的排序需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值