#include <iostream>
#include <algorithm>
#include <deque>
using namespace std;
struct Node
{
int x,y;
Node(int a = 0,int b = 0):x(a),y(b){}
bool operator <(const Node& n)
{
if (x == n.x)
return y > n.y ;
return x > n.x ;
}
};
typedef struct Node SNode;
struct NodeComparator
{
bool operator()(const Node* nl,const Node* nr)
{
if (nl->x == nr->x)
return nl->y > nr->y;
return nl->x > nr->x;
}
};
typedef struct NodeComparator SNodeComparator;
struct NodeFinder
{
int x ;
int y ;
NodeFinder(int a,int b):x(a),y(b){}
//此处不能使用const SNode&
bool operator()(const SNode* pNode) const
{
return pNode->x == x && pNode->y == y ;
}
};
typedef struct NodeFinder SNodeFinder;
int main(int argc, char* argv[])
{
deque<SNode* > q;
q.push_back(new SNode(10,12));
q.push_back(new SNode(15,12));
q.push_back(new SNode(20,12));
q.push_back(new SNode(35,12));
q.push_back(new SNode(25,12));
q.push_back(new SNode(10,22));
NodeComparator nodeComparator;
std::cout << "make heap" <<std::endl;
make_heap(q.begin(),q.end(),nodeComparator);
cout << "front " << q.front()->x << " "<<q.front()->y <<endl;
for (unsigned int i = 0; i< q.size(); i++)
cout << q[i]->x <<" "<< q[i]->y << endl;
std::cout << "pop heap" <<std::endl;
pop_heap(q.begin(),q.end(),nodeComparator);
q.pop_front();
for(unsigned int i = 0; i< q.size(); i++)
std::cout << q[i]->x <<" "<< q[i]->y << std::endl;
deque<SNode* >::iterator it = find_if(q.begin(),q.end(),SNodeFinder(20,12));
if(it != q.end())
{
q.erase(it);
std::cout << "removed the found node."<<std::endl;
}
make_heap(q.begin(),q.end(),nodeComparator);
sort_heap(q.begin(),q.end(),nodeComparator);
for (unsigned int i = 0; i< q.size(); i++)
std::cout << q[i]->x <<" "<< q[i]->y << std::endl;
std::cout << '\n';
return 0;
}