#include <iostream> // std::cout#include <algorithm> // std::make_heap, std::pop_heap, std::push_heap, std::sort_heap#include <vector> // std::vectorusing namespace std;class Index { public: Index(int a, float b) { i = a; cost = b; } int i; float cost; };
struct greater1 { bool operator()(const Index& a, const Index& b) const { std::cout <<"operator ,ai ="<< ' ' <<" acost ="<< ' ' << a.cost<<'\n'; std::cout <<"operator ,bi ="<< ' ' <<" bcost ="<< ' ' << b.cost<<'\n'; return a.cost > b.cost; }};struct greater2 { bool operator()(const Index& a, const Index& b) const { //return a.cost > b.cost; std::cout <<"operator ,ai ="<< ' ' <<" acost ="<< ' ' << a.cost<<'\n'; std::cout <<"operator ,bi ="<< ' ' <<" bcost ="<< ' ' << b.cost<<'\n'; }}; int main(){ int myints[] = {0,1,2,3,4,5,6,7}; std::vector<Index> v; v.clear(); for(int i=0;i<8;i++) v.push_back(Index(i, myints[i])); std::cout <<"start ,size ="<< ' ' << v.size()<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; std::pop_heap(v.begin(), v.end(), greater2()); //std::pop_heap(v.begin(), v.end()); //不重载,编译失败(容器元素是类对象,含有两个成员,需指定) std::cout <<"pop_heap no grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; std::pop_heap(v.begin(), v.end(), greater2()); std::cout <<"pop_heap no grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; std::pop_heap(v.begin(), v.end(), greater2()); std::cout <<"pop_heap no grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; std::pop_heap(v.begin(), v.end(), greater1()); std::cout <<"pop_heap grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; std::pop_heap(v.begin(), v.end(), greater1()); std::cout <<"pop_heap grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; v.pop_back(); std::pop_heap(v.begin(), v.end(), greater1()); std::cout <<"pop_heap grearter "<<'\n'; for (unsigned i=0; i<v.size(); i++) std::cout <<i<< ' ' << v[i].cost<< '\n' ; std::cout << '\n' ; return 0;}
运行结果:
start ,size = 80 01 12 23 34 45 56 67 7operator ,ai = acost = 2operator ,bi = bcost = 1operator ,ai = acost = 4operator ,bi = bcost = 3operator ,ai = acost = 3operator ,bi = bcost = 7operator ,ai = acost = 1operator ,bi = bcost = 7pop_heap no grearter 0 71 12 23 34 45 56 67 0operator ,ai = acost = 2operator ,bi = bcost = 1operator ,ai = acost = 4operator ,bi = bcost = 3operator ,ai = acost = 3operator ,bi = bcost = 0operator ,ai = acost = 1operator ,bi = bcost = 0pop_heap no grearter 0 01 12 23 34 45 56 67 7operator ,ai = acost = 2operator ,bi = bcost = 1operator ,ai = acost = 4operator ,bi = bcost = 3operator ,ai = acost = 3operator ,bi = bcost = 7operator ,ai = acost = 1operator ,bi = bcost = 7pop_heap no grearter 0 71 12 23 34 45 56 67 0operator ,ai = acost = 2operator ,bi = bcost = 1operator ,ai = acost = 4operator ,bi = bcost = 3operator ,ai = acost = 3operator ,bi = bcost = 0operator ,ai = acost = 1operator ,bi = bcost = 0pop_heap grearter 0 01 12 23 34 45 56 67 7operator ,ai = acost = 2operator ,bi = bcost = 1operator ,ai = acost = 4operator ,bi = bcost = 3operator ,ai = acost = 3operator ,bi = bcost = 7pop_heap grearter 0 11 32 23 74 45 56 67 0operator ,ai = acost = 2operator ,bi = bcost = 3operator ,ai = acost = 5operator ,bi = bcost = 6pop_heap grearter 0 21 32 53 74 45 66 1转载于:https://www.cnblogs.com/Baron-Lu/p/6677042.html
