利用priority_queue实现top K

#include <bits/stdc++.h>
using namespace std;
class fix_priority_queue {
	int						max_size;
	priority_queue <int, vector<int>, greater<int> >q;
public:
	fix_priority_queue( int max_size )
	{
		this->max_size = max_size;
	}

	void add( int x )
	{
		if ( q.size() < max_size )
		{
			q.push( x );
		}else{
			int a = q.top();
			if ( a < x )
			{
				q.pop();
				q.push( x );
			}
		}
	}


	void pop()
	{
		q.pop();
	}


	int top()
	{
		return(q.top() );
	}


	bool empty()
	{
		return(q.empty() );
	}
};
int main()
{
	fix_priority_queue q( 5 );


	srand( time( 0 ) );
	for ( int i = 0; i != 10; ++i )
	{
		int a = rand();
		printf( "%d ", a );
		q.add( a );
	}
	printf( "\n" );
	while ( !q.empty() )
	{
		printf( "%d ", q.top() );
		q.pop();
	}
	return(0);
}

原创文章 54 获赞 168 访问量 63万+

猜你喜欢

转载自blog.csdn.net/bojie5744/article/details/51189079
今日推荐