stl—priority_queue(优先队列)

本文介绍了C++ STL中的优先队列(priority_queue),包括其定义、基本操作及使用示例。通过不同方式定义优先队列,展示如何实现最小优先队列和最大优先队列,并给出具体的代码实现。

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

最早见到priority_queue是在轶健学长的一段代码里。后来在山东理工的huffman树那部分,核心也是优先队列

这是STL封装好的一种容器,排序原理目前才疏学浅并不了解。相当于在队列中为每个元素定义了一个优先权,根据权值对每个元素排列。

下面主要总结一下定义方式的操作函数

(1) 优先队列的基础

头文件:#include<queue>

简单来说就是自定义优先级的队列,从大到小(最大项优先)或者从小到大(最小项优先)

定义类型分为默认优先关系优先队列,自定义比较结构的优先队列,自定义结构体类型优先队列,头文件functional内定义优先级的优先队列

(2) 优先队列的常用操作

优先级队列支持的操作

q.empty()         如果队列为空,则返回true,否则返回false

q.size()            返回队列中元素的个数

q.pop()             删除队首元素,但不返回其值

q.top()             返回具有最高优先级的元素值,但不删除该元素

q.push(item)     在基于优先级的适当位置插入新元素

q.top()为确定优先级最高的元素,在最小优先队列中搜索优先权最小的元素,在最大优先队列中搜索优先权最大的元素。

优先队列插入和删除元素的复杂度都是O(logn)

另外,在优先队列中,元素可以具有相同的优先权。

代码:(修改自网上博客)

#include<iostream>
#include<cstdio>
#include<queue>
#include<functional>///geater/less
#include<vector>///去掉不影响
using namespace std;

//定义比较结构
struct cmp1{
    bool operator ()(int &a,int &b){
        return a>b;//最小值优先
    }
};

struct cmp2{
    bool operator ()(int &a,int &b){
        return a<b;//最大值优先
    }
};

//自定义数据结构
struct n1{
    int x;
    bool operator < (const n1 &a) const {
        return x>a.x;//最小值优先
    }
};
struct n2{
    int x;
    bool operator < (const n2 &a) const {
        return x<a.x;//最大值优先
    }
};
n1 num1[]={14,10,56,7,83,22,36,91,3,47,72,0};
n2 num2[]={14,10,56,7,83,22,36,91,3,47,72,0};



int a[]={14,10,56,7,83,22,36,91,3,47,72,0};


int main()
{
    priority_queue<int>que;//采用默认优先级构造队列(从大到小)

    priority_queue<int,vector<int>,cmp1>que1;//最小值优先
    priority_queue<int,vector<int>,cmp2>que2;//最大值优先

    priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,从小到大
    priority_queue<int,vector<int>,less<int> >que4;////从大到小

    ///定义结构体类型优先队列
    priority_queue<n1>que5; //最小优先级队列
    priority_queue<n2>que6;  //最大优先级队列

    int i;
    for(i=0;a[i];i++){
        que.push(a[i]);
        que1.push(a[i]);
        que2.push(a[i]);
        que3.push(a[i]);
        que4.push(a[i]);
    }
    for(i=0;num1[i].x;i++)
        que5.push(num1[i]);
    for(i=0;num2[i].x;i++)
        que6.push(num2[i]);


    printf("采用默认优先关系:\n(priority_queue<int>que;)\n");
    printf("******0******:\n");
    while(!que.empty()){
        printf("%3d",que.top());
        que.pop();
    }
    printf("\n\n");
    printf("采用结构体自定义优先级方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n");
    printf("******1******:\n");
    while(!que1.empty()){
        printf("%3d",que1.top());
        que1.pop();
    }
    printf("\n");
    printf("******2******:\n");
    while(!que2.empty()){
        printf("%3d",que2.top());
        que2.pop();
    }
    printf("\n\n");
    printf("采用头文件<functional>内定义优先级:\n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n");
    printf("*****3******:\n");
    while(!que3.empty()){
        printf("%3d",que3.top());
        que3.pop();
    }
    printf("\n");
    printf("******4******:\n");
    while(!que4.empty()){
        printf("%3d",que4.top());
        que4.pop();
    }
    printf("\n\n");
    printf("采用结构体自定义优先级方式二:\n(priority_queue<number>que)\n");
    printf("******5******:\n");
    while(!que5.empty()){
        printf("%3d",que5.top());
        que5.pop();
    }
    printf("\n");
    printf("******6******:\n");
    while(!que6.empty()){
        printf("%3d",que6.top());
        que6.pop();
    }
    printf("\n");
    return 0;
}
/*
运行结果 :
(priority_queue<int>que;)
83 72 56 47 36 22 14 10  7  3


(priority_queue<int,vector<int>,cmp>que;)
1:
 7 10 14 22 36 47 56 72 83 91
2:
83 72 56 47 36 22 14 10  7  3



(priority_queue<int,vector<int>,greater<int>/less<int> >que;)
3:
 7 10 14 22 36 47 56 72 83 91
4:
83 72 56 47 36 22 14 10  7  3



(priority_queue<number>que)
5:
 7 10 14 22 36 47 56 72 83 91
6:
83 72 56 47 36 22 14 10  7  3
*/



内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值