1.priority_queue(优先队列):

  • 概述:C++ STL中的优先队列是优先队列的一种经典实现,插入元素的时间复杂度大约为O(nlogn)
  • 首先,需要包括queue头文件,也就是这样:
#include<queue>
  • 之后,我们先声明打算放入优先队列的变量或结构体,比如:
struct Node{
    int value;
    bool operator <(const Node& anotherNode)const{//运算符重载
        return value<anotherNode.value;
    }
};
int a=1;
  • C++ STL中的priority_queue可以对各种类型的数据进行排序(基本数据类型或具有运算符重载的结构体).如果是对结构体进行排序,我们就可以通过修改在运算符重载中return的值来修改数据在priority_queue中的排列顺序(降序或升序等)(具体来说(在普通的简单情况下),如果在运算符重载处使用正常的<,在priority_queue中的数据就会按降序排列(也就是从大到小),反之,如果故意返回相反的值,在priority_queue中的数据自然就会按升序排列).
  • 对于基本数据类型的priority_queue测试代码:
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int main(){
	priority_queue<int> q;//主要区别
	q.push(5);
	q.push(3);
	for(int i=1;i<=2;i++){
		int nowValue=q.top();q.pop();
		cout<<nowValue<<" ";
	}
	cout<<endl;
	return 0;
}
  • 对于结构体的priority_queue测试代码:
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
struct Node{
	int value;
	bool operator <(const Node& rds)const{
		return value<rds.value;
	}
};
int main(){
	priority_queue<Node> q;////主要区别
	q.push(Node{5});
	q.push(Node{3});
	for(int i=1;i<=2;i++){
		int nowValue=q.top().value;q.pop();
		cout<<nowValue<<" ";
	}
	cout<<endl;
	return 0;
}
  • 从上面的代码可以看出,使用结构体或基本数据类型作为优先队列中的数据在我们使用时的区别,主要是在声明priority_queue时的"< >"中.