zoukankan      html  css  js  c++  java
  • priority_queue实现

    #include <algorithm>
    
    using namespace std;
    /*
    priority_queue只允许在底端加入元素,并从顶端取出元素,
    其内部元素不是依照被推入的次序排列,而是自动按照元素的权值排列,权值最大的元素排在最前面
    缺省情况下priority_queue是利用一个max_heap完成.模板默认参数是vector,less. 
    常用接口:top(), push(), pop(),类似栈的接口
    */ template <class T,class Sequence=vector<T>,class Compare=less<typename Sequence::value_type>> class priority_queue { public: typedef typename Sequence::value_type value_type; typedef typename Sequence::size_type size_type; typedef typename Sequence::reference reference; typedef typename Sequence::const_reference const_reference; protected: Sequence c;//底层容器 Compare comp;//元素大小比较标准 public: priority_queue() :c(){} explicit priority_queue(const Compare& x) :c(), comp(x){} //make_heap(),push_heap(),pop_heap()都是泛型算法 template <class InputIterator> priority_queue(InputIterator first, InputIterator last, const Compare& x) : c(first, last), comp(x) { make_heap(c.begin(), c.end(), comp); } template <class InputIterator> priority_queue(InputIterator first, InputIterator last) : c(first,last) { make_heap(c.begin(), c.end(), comp); } void push(const value_type &x) { __STL_TRY{ c.push_back(x); //重排heap push_heap(c.begin(), c.end(), comp); } __STL_UNWIND(c.clear()); } void pop() { __STL_TRY{ pop_heap(c.begin(), c.end(), comp); c.pop_back(); } __STL_UNWIND(c.clear()); } };
  • 相关阅读:
    (转)基于REST架构的Web Service设计
    WPF 简易的喷泉效果
    C# 取Visio模型信息的简易方法
    WPF TextBox按字节长度限制输入
    NPOI导出WPF DataGrid控件显示数据
    WPF--TextBlock的ToolTip附加属性
    【转】WPF 从FlowDocument中找到Hyperlink
    WPF 初学VisifireChart
    WPF 简易进度条效果
    WPF 简易的跑马灯效果
  • 原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/4230378.html
Copyright © 2011-2022 走看看