簡體   English   中英

如何在“std::make_heap”中閱讀“std::greater<>{}”

[英]How to read "std::greater<>{}" in "std::make_heap"

// min heap solution
// extract k smallest data from a min-heap of all n data points
class K_Smallest_MinHeap {

public:

  K_Smallest_MinHeap(std::size_t n, std::size_t k): N(n), K(k), count(0)
    {  }

  void add(int value){
    values.push_back(value);
  }
  
  std::vector<int> get(){
    std::make_heap(values.begin(), values.end(), std::greater<>{});
    std::vector<int> result;
    for (std::size_t i = 0; i < K; ++i){
      std::pop_heap(values.begin(), values.end(), std::greater<>{});
      result.push_back(values.back());
      values.pop_back();
    }
    return result;
  }
  
private:
  std::size_t N;
  std::size_t K;
  std::size_t count;
  std::vector<int> values;
};

大家好

我不明白 std::make_heap() 中的“std::greater<>{}”

我認為只需要兩個迭代器開始和結束?

“void make_heap(先隨機,最后隨機);”

感謝您的幫助!

function std::make_heap為兩組參數重載

template<class RandomAccessIterator>
void make_heap(RandomAccessIterator first, RandomAccessIterator last);

template<class RandomAccessIterator, class Compare>
void make_heap(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);

所以第三個參數明確指定了用於構建堆的比較 function。

根據cppreference

template< class RandomIt >
void make_heap( RandomIt first, RandomIt last );

template< class RandomIt >
constexpr void make_heap( RandomIt first, RandomIt last );

template< class RandomIt, class Compare >
void make_heap( RandomIt first, RandomIt last,
                Compare comp );

template< class RandomIt, class Compare >
constexpr void make_heap( RandomIt first, RandomIt last,
                          Compare comp );

[first, last)范圍內構造一個max heap function 的第一個版本使用operator<來比較元素,第二個版本使用給定的比較 function 比較。

我不明白 std::make_heap() 中的“std::greater<>{}”

我認為只需要兩個迭代器開始和結束?

如果您的make_heap function 只需要兩個迭代器,它將創建一個max_heap

如果你想創建一個min_heap ,你應該使用operator>來比較元素,這正是std::greater<>{}所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM