写C++代码原型(1) template <typename T, typename CMP_T=std::less<T>> void heapsort(vector<T>& v, CMP_T cmp=CMP_T()); 和原型(2) template <typename T, typename CMP_T=std::less<T>> void heapsort(vector<T>& v, int left, int right, CMP_T cmp=CMP_T());
时间: 2023-06-17 21:01:56 浏览: 111
C++ templates
原型 (1) 是一个简单的堆排序函数,它接受一个 vector 引用和一个可选的比较器对象。如果不提供比较器对象,则默认使用 std::less 。
代码实现如下:
```cpp
template <typename T, typename CMP_T=std::less<T>>
void heapsort(vector<T>& v, CMP_T cmp=CMP_T()) {
std::make_heap(v.begin(), v.end(), cmp);
std::sort_heap(v.begin(), v.end(), cmp);
}
```
原型 (2) 与原型 (1) 相似,但它只对 vector 的一个子区间进行排序。它接受一个 vector 引用、左右边界和一个可选的比较器对象。如果不提供比较器对象,则默认使用 std::less 。
代码实现如下:
```cpp
template <typename T, typename CMP_T=std::less<T>>
void heapsort(vector<T>& v, int left, int right, CMP_T cmp=CMP_T()) {
std::make_heap(v.begin() + left, v.begin() + right + 1, cmp);
std::sort_heap(v.begin() + left, v.begin() + right + 1, cmp);
}
```
阅读全文