代码之家  ›  专栏  ›  技术社区  ›  Shridhar R Kulkarni

使用标准::更大

  •  4
  • Shridhar R Kulkarni  · 技术社区  · 7 年前

    std::greater 与一起使用时 sort ,它按降序输出数字。但当与 priority_queue

    例子:

    #include <iostream>     // std::cout
    #include <functional>   // std::greater
    #include <algorithm>    // std::sort
    #include <queue>        // std::priority_queue
    
    int main () {
      int numbers[]={20,40,50,10,30};
      std::priority_queue<int, std::vector<int>, std::greater<int>> pq (numbers, numbers+5);
      std::sort(numbers, numbers + 5, std::greater<int>());
      while(!pq.empty()){
          std:: cout << pq.top() << ' ';
          pq.pop();
      }
      std::cout << '\n';  
      for (int i=0; i<5; i++)
        std::cout << numbers[i] << ' ';
      return 0;
    }
    

    以上代码的输出为:

    10 20 30 40 50 50 40 30 20 10

    或者类似的线路,

    std::priority_queue<int, std::vector<int>, std::greater<int> > 创建最小堆 std::priority_queue<int, std::vector<int>, std::less<int> > 创建最大堆。可能正好相反。为什么会这样?

    1 回复  |  直到 7 年前
        1
  •  6
  •   dfrib    7 年前

    引用 std::priority_queue at cppreference [强调我的]

    优先级队列是一个容器 adaptor 提供恒定的时间 查找最大的(默认情况下)元素,代价是 对数插入和提取。

    Compare 可提供更改订单, 例如 使用 std::greater<T> 这个 top() .

    所以这个顺序是意料之中的,并没有真正涉及到 std::sort

    对范围中的元素进行排序 [first, last) 秩序 .

    参数

    • first last -要排序的元素的范围

    • policy -要使用的执行策略。有关详细信息,请参阅执行策略。

    • comp -比较函数对象(即满足 它回来了 true 如果 论点 少于 second .

    作为 std::greater 会回来的 如果它的第一个参数是 第二个,我们希望在使用 具有 作为执行比较的函数对象。


    即。, std::greater 恰好是用于在示例的这两个不同上下文中执行比较的函数对象。