stl priority_queue的使用

今天使用stl的优先队列的时候,发现原来自己并不怎么会用,就只会在有基础数据类型的时候知道
怎么用,一有结构体或者类,就不知道怎么使用。于是摸索摸索,就写了这篇东西。
一般的用法都是
priority_queue priq;
priq.push(5);
这样就可以了。
可是有结构体的时候,就需要看下优先队列原本是怎么制定的,以下是其构造函数。
from:http://www.cplusplus.com/reference/stl/priority_queue/priority_queue/
explicit priority_queue ( const Compare& x = Compare(),
                          const Container& y = Container() );
template 
         priority_queue ( InputIterator first, InputIterator last,
                          const Compare& x = Compare(),
                          const Container& y = Container() );
我们可以设定priority_queue<user, vector, cmp> q。
第一个参数user是一个结构体,它是一个用来做compare的数据类型,
第二个要是一个容器。原本两个参数就足够了,但其实还不足以,我们需要自己定制一个比较函数。这里是需要
通过重载()来实现的。至于why,暂时没搞明白,毕竟在这里是说怎么用,而不是讲它怎么来的。
struct user {   
	user(){}
	user(char n[], int c) { 
		strcpy(name, n);
		cnt = c;    
	}
	char name[15];
	int num;
};
//设置多个比较函数的时候需要这样写,因为需要区分嘛,如果只构造一种优先队列的话,直接写重载()就好了,如下,就不用写到类里面。
/*
        bool operator()(const user a,const user b) const
	{
		return a.cnt > b.cnt;
	}
*/
class mincmp {
public:
	bool operator()(const user a,const user b) const
	{
		return a.cnt > b.cnt;
	}
};
int main()
{
    //按自己制定的比较函数,最小的在队列的开头
    priority_queue<user, vector
  
   , mincmp> minq;
    minq.push(user("bob",5));
    minq.push(user("alice",7));
    cout << minq.top().name << endl;   //bob
    return 0;
}

  

你可能感兴趣的:(stl priority_queue的使用)