当前位置 博文首页 > queue基础_白徽的博客:优先队列--priority

    queue基础_白徽的博客:优先队列--priority

    作者:[db:作者] 时间:2021-07-30 20:58

    基础法门

    对基本数据类型的操作

    //reviem the priority_queue
    
    #include <iostream>
    #include <queue>//头文件 
    using namespace std;
    
    int  main(void)
    {
    	//定义 priority_queue<typename> name;
    	//默认为从大到小的队列。 
    	priority_queue<int> que;
    	
    	//name.push(x)--进队
    	//函数的时间复杂度O(logN) 
    	que.push(2);
    	que.push(3);
    	que.push(3);
    	que.push(4);
    	
    	
    	//name.top()--返回队头元素 
    	//没有front和back()函数,top函数的时间复杂度O(1) 
    	cout<<que.top()<<endl;
    	
    	
    	//name.pop();--出队
    	//函数的时间复杂度O(logN)
    	//不能输出它的返回值! 
    	que.pop(); 
    	que.pop();
    	
    	//name.size()--元素有多少
    	//函数的时间复杂度O(1) 
    	cout<<que.size()<<endl;
    	
    	que.pop(); 
    	que.pop();
    	
    	//判空--返回bool 
    	//函数的时间复杂度O(1) 
    	if(que.empty())cout<<"Is empty"<<endl;
    	
    	//设置优先级--第三个如果是less<typename> 是值大的优先,greater<int> 值小的优先 
    	//priority_queue<typename,vector<typename>,less<typename> > name;
    	priority_queue<int,vector<int>,greater<int> > vi;
    	
    	vi.push(2);
    	vi.push(6);
    	vi.push(4);
    	
    	for(int i = vi.size();i > 0;i--){
    		cout<<vi.top()<<endl;
    		vi.pop();
    	} 
    	
    	return 0;
    }
    

    对结构体的操作

    //reviem the priority_queue
    
    #include <iostream>
    #include <queue>//头文件 
    using namespace std;
    
    //存入优先队列的数据如果是结构体得对其进行运算符重载
    //从大到小 
    struct fruit{
    	int price;
    	string name;
    	friend operator < (fruit f1,fruit f2){
    		return f1.price < f2.price;
    	}
    };
    
    int  main(void)
    {
    	priority_queue<fruit> vi;
    	fruit f1;
    	f1.name = "apple";
    	f1.price = 2;
    	
    	fruit f2;
    	f2.name = "orange";
    	f2.price = 3;
    	
    	fruit f3;
    	f3.name = "potato";
    	f3.price = 1;
    	
    	vi.push(f1);
    	vi.push(f2);
    	vi.push(f3);
    	
    	for(int i = vi.size();i > 0;i--){
    		cout<<vi.top().name<<' '<<vi.top().price<<endl;
    		vi.pop();
    	}
    	
    	return 0;
    }
    
    //不可以重载大于号,只能是小于号
    //从小到大 
    struct gal{
    	int price;
    	string name;
    	friend operator < (gal f1,gal f2){
    		return f1.price > f2.price;
    	}
    };
    
    cs