make_heap(ivec.begin(),ivec.end(),greater
//9 5 8 3 4 0 2 3 1
for(int i=0;i
cout<
ivec.push_back(7);
push_heap(ivec.begin(),ivec.end(),comp);
//9 7 8 3 5 0 2 3 1 4
for(int i=0;i
cout<
pop_heap(ivec.begin(),ivec.end(),comp);
cout<
sort_heap(ivec.begin(),ivec.end(),comp);
//9 7 8 3 5 0 2 3 1 4
for(int i=0;i
system("pause");
return 0;
}
#include system("pause"); (2)利用priority_queue构建堆(STL源码剖析P183,其实利用了上面的接口) STL中提供了一种priority_queue,缺省情况下利用max_heap完成。STL中的priority_queue往往不被归类为容器,而是被归类为容器迭代器。 STL中的声明priority_queue声明如下: template class priority_queue{ .... } 从上面的定义看出,STL的priority_queue采用vector实现,且Compare比较函数为仿函数less,我们可以传入greater,构造最小堆。 #include 换一个仿函数就能构造最小堆: [cpp] #include (3)利用set(或者multiset)构建堆(剑指offer P169页) [cpp] #include typedef greater MaxHeap heap;
#include
#include
#include
using namespace std;
int main()
{
int arr[]={0,1,2,3,4,8,9,3,5};
vector
//greater
less
make_heap(ivec.begin(),ivec.end(),greater
//9 5 8 3 4 0 2 3 1
for(int i=0;i
cout<
ivec.push_back(7);
push_heap(ivec.begin(),ivec.end(),comp);
//9 7 8 3 5 0 2 3 1 4
for(int i=0;i
cout<
pop_heap(ivec.begin(),ivec.end(),comp);
cout<
sort_heap(ivec.begin(),ivec.end(),comp);
//9 7 8 3 5 0 2 3 1 4
for(int i=0;i
return 0;
}
[cpp]
#include
#include
#include
using namespace std;
int main()
{
int arr[]={0,1,2,3,4,5,8,9,3,5};
priority_queue
cout<<"size="<
cout<
}
system("pause");
}
#include
#include
using namespace std;
int main()
{
int arr[]={0,1,2,3,4,5,8,9,3,5};
priority_queue
cout<<"size="<
cout<
}
system("pause");
}
#include
#include
#include
using namespace std;
int main()
{
int arr[]={0,1,2,3,4,5,8,9,3,5};
priority_queue
cout<<"size="<
cout<
}
system("pause");
return 0;
}
#include
#include
using namespace std;
int main()
{
int arr[]={0,1,2,3,4,5,8,9,3,5};
priority_queue
cout<<"size="<
cout<
}
system("pause");
return 0;
}
#include
#include
#include
#include
using namespace std;
typedef greater
typedef less
typedef multiset
typedef multiset
int main()
{
int arr[]={0,1,2,3,4,8,9,3,5};
MaxHeap heap;
for(int i=0;i<9;i++){
heap.insert(arr[i]);
}
for(Iterator it = heap.begin();it!=heap.end();++it){
cout<<*it<<" ";
}
cout<
heap.erase(heap.begin());
heap.insert(10);
for(Iterator it = heap.begin();it!=heap.end();++it){
cout<<*it<<" ";
}
system("pause");
return 0;
}
#include
#include
#include
using namespace std;
typedef less
typedef multiset
typedef multiset
int main()
{
int arr[]={0,1,2,3,4,8,9,3,5};
for(int i=0;i<9;i++){
heap.insert(arr[i]);
}
for(Iterator it = heap.begin();it!=heap.end
