C++ STL 常用数据结构

本文详细介绍了C++ STL中的优先队列priority_queue,包括其插入操作的时间复杂度、如何包含queue头文件、如何声明和使用priority_queue。无论是对基本数据类型还是自定义结构体,priority_queue都能进行排序。文中还提供了测试代码示例,展示了如何通过运算符重载控制数据的排序顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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时的"< >"中.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值