C++ 为什么';t sort\u heap按我期望的顺序放置元素?
给定以下代码:C++ 为什么';t sort\u heap按我期望的顺序放置元素?,c++,heap,C++,Heap,给定以下代码: // range heap example #include <iostream> #include <algorithm> #include <vector> using namespace std; bool Greater(int a, int b) { if (a > b) { return true; } else { return false;
// range heap example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool Greater(int a, int b)
{
if (a > b)
{
return true;
}
else
{
return false;
}
}
int main () {
int myints[] = {10,20,30,5,15};
vector<int> v(myints,myints+5);
//vector<int>::iterator it;
make_heap (v.begin(),v.end(), Greater);
cout << "initial min heap : " << v.front() << endl;
pop_heap (v.begin(),v.end(), Greater); v.pop_back();
cout << "min heap after pop : " << v.front() << endl;
v.push_back(9); push_heap (v.begin(),v.end(), Greater);
cout << "min heap after push: " << v.front() << endl;
sort_heap (v.begin(),v.end());
cout << "final sorted range :";
for (unsigned i=0; i<v.size(); i++) cout << " " << v[i];
cout << endl;
return 0;
}
//范围堆示例
#包括
#包括
#包括
使用名称空间std;
布尔更大(整数a、整数b)
{
如果(a>b)
{
返回true;
}
其他的
{
返回false;
}
}
int main(){
int myints[]={10,20,30,5,15};
向量v(myints,myints+5);
//向量::迭代器;
使堆(v.begin(),v.end(),更大);
coutsort\u heap仅在根据提供的比较器对范围进行堆排序的情况下对其进行排序。由于在所有堆操作中都使用了“更大”作为比较器,因此根据默认比较器,您没有按堆顺序排列的元素,因此不能保证sort\u heap正常工作。常规排序算法应该可以正常工作,不是吗hough.sort\u heap仅在范围按照提供的比较器进行堆排序时对其进行排序。由于在所有堆操作中都使用了“更大”作为比较器,因此您没有按照默认比较器进行堆排序的元素,因此不能保证sort\u heap正常工作。常规排序算法应该只在但是,ne。与所有其他堆操作一样,您需要将Greater
传递给sort\u heap
sort_heap (v.begin(),v.end(), Greater);
正如@blastfunner提到的,std::morerar()
比定义自己的函数更可取。除了优雅因素外,还有一个性能问题:当通过引用将函数传递给函子进行隐式转换时,它首先隐式转换为函数指针,这可能会由于间接分支指令而导致执行效率降低。您需要与所有其他堆操作一样,sGreater
到sort\u heap
sort_heap (v.begin(),v.end(), Greater);
正如@blastfunner提到的,std::morerar()
比定义自己的函数更可取。除了优雅因素外,还有一个性能问题:当通过引用将函数传递给函子进行隐式转换时,它首先隐式转换为函数指针,这可能会由于间接分支指令而导致执行效率降低。这不是您的问题estion,但是Greater()
可以实现为返回a>b;
@Fred。这也是我看到这段代码后的第一个反应。@Fred:在这种情况下,使用std::Greater()
比创建自己的比较函数更简单。这不是你的问题,而是Greater()
可以实现为返回a>b;
@Fred。这也是我看到这段代码后的第一个反应。@Fred:在这种情况下,使用std::greater()
比创建自己的比较函数更简单。