[英]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.