C++标准模板库(STL)之队列及优先队列

news/2024/7/24 11:26:18 标签: c++, 开发语言, 青少年编程, 数据结构,

queue翻译为队列,在STL中实现了一个先进先出的容器.

1.queue的定义

   queue<typename> name;

2.queue容器内元素的访问

   队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素,或是通过back()来访问队尾元素.

3.queue常用函数

   (1) push()

        push(x)将x进行入队

   (2) front(), back()

        front()和back()可以分别获得队首元素和队尾元素.

   (3) pop()

         pop()令队首元素出队

   (4) empty()

         empty()检查queue是否为空,空则返回true,非空则返回false.

   (5) size()

         size()返回queue内元素的个数.

应用举例:

#include <iostream>
#include <queue>
using namespace std;
int main()
{
	queue<int> q;
	for(int i=1;i<+9;i++)
        q.push(i);        //入队 
    while(!q.empty())
    {
    	cout<<"当前队列里有"<<q.size()<<"个元素,队首为 "<<q.front()<<",队尾为 "<<q.back()<<endl;
    	q.pop();          //出队 
		 
	}
	cout<<"测试结束!!!";
    return 0;
}

priority_queue又称为优先队列,其底层是用堆来进行实现的.

优先队列中,队首元素一定是当前队列中优先级最高的那个.

1. priority_queue的定义

    priority_queue<typename> name;

2. priority_queue容器内元素的访问

    只能通过top()函数来访问队首元素,也就是优先级最高的元素.

3.priority_queue常用函数

   

(1) push()

         push(x)将x进行入队

   (2) top()

        top()可以分别获得队首元素.

   (3) pop()

         pop()令队首元素出队

   (4) empty()

         empty()检查优先队列是否为空,空则返回true,非空则返回false.

   (5) size()

         size()返回优先队列内元素的个数.

4.优先队列内元素优先级的设置

   (1)基本数据类型的优先级设置

       默认的优先级设置是数字大或字典序大的优先级高.下面两种优先队列的定义是等价的:

       priority_queue<int> q;            priority_queue< int, vector<int>, less<int> > q;

       可以看出,第二种定义方式的尖括号内多了两个参数,其中vector<int>填写的是来承载底层数据结构堆(heap)的容器,如果第一个参数是double型或char型,则此处只需要填写vector<double>或vector<char>;而第三个参数则是对第一个参数的比较类,less<int>表示数字大的优先级大,而greater<int> 表示数字小的优先级大.                                                                                                                               

    (2)结构体的优先级设置             

        举一个水果的例子

        #方法一:通过友元函数重载小于号(第一种定义方式定义优先队列)

#include <iostream>
#include <queue>
using namespace std;
struct fruit
{
	string name;
	int price;
	friend bool operator < (fruit f1,fruit f2)
	{
		return f1.price>f2.price;
	}
};
int main()
{
    priority_queue<fruit> q;
    fruit f[]={"桃子",3,"梨子",4,"苹果",1,"杏子",2};
	for(int i=0;i<=3;i++)
       q.push(f[i]);
	cout<<q.top().name<<" "<<q.top().price<<endl; 
    return 0;
}

   #方法二:cmp函数实现(第二种定义方式定义优先队列)    

#include <iostream>
#include <queue>
using namespace std;
struct fruit
{
	string name;
	int price;
};
struct cmp
{
	bool operator () (fruit f1,fruit f2) 
	{
	return  f1.price>f2.price;
    }
};
int main()
{
    priority_queue<fruit,vector<fruit>,cmp> q;
    fruit f[]={"桃子",3,"梨子",4,"苹果",1,"杏子",2};
	for(int i=0;i<=3;i++)
       q.push(f[i]);
	cout<<q.top().name<<" "<<q.top().price<<endl; 
    return 0;
}


http://www.niftyadmin.cn/n/5478029.html

相关文章

ip地址切换器安卓版,保护隐私,自由上网

在移动互联网时代&#xff0c;随着智能手机和平板电脑的普及&#xff0c;移动设备的网络连接变得愈发重要。为了满足用户在不同网络环境下的需求&#xff0c;IP地址切换器安卓版应运而生。本文将以虎观代理为例&#xff0c;为您详细解析IP地址切换器安卓版的功能、应用以及其所…

vue3学习笔记(pinia)

defineModel&#xff1a;快速实现组件的双向绑定 pinia&#xff1a;在仓库中提供数据和使用数据 创建store文件夹&#xff0c;在里面创建counter.js&#xff0c;以提供数据&#xff0c;注意需要return 和 export&#xff0c;export的是一个函数。 import { defineStore } from…

Jmeter ServerAgent windows启动报错 NoClassDefFoundError

下载ServerAgent-2.2.3 后执行startAgent.bat 报错如下&#xff1a; 尝试解决方案一&#xff1a; 将整个ServerAgent-2.2.3文件夹复制到jdk目录下的bin目录下&#xff0c;然后重新进入目录执行startAgent.bat

【leetcode面试经典150题】23.找出字符串中第一个匹配项的下标(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Redis 事务介绍

Redis事务提供了一种将多个命令打包成一个执行单元的机制&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;这与传统的数据库事务具有类似的特性。Redis事务使用MULTI、EXEC、DISCARD和WATCH命令来实现。 以下是Redis事务的基本介绍和使用方法&#xff1…

OpenHarmony实战:帆移植案例(中)

OpenHarmony实战&#xff1a;帆移植案例&#xff08;上&#xff09; Audio服务介绍 服务节点 基于ADM框架的audio驱动对HDI层提供三个服务hdf_audio_render、hdf_audio_capture、hdf_audio_control。 开发板audio驱动服务节点如下&#xff1a; console:/dev # ls -al hdf_au…

伪装目标检测论文阅读之:《Confidence-Aware Learning for Camouflaged Object Detection》

论文地址&#xff1a;link code:link 摘要&#xff1a;   任意不确定性捕获了观测结果中的噪声。对于伪装目标检测&#xff0c;由于伪装前景和背景的外观相似&#xff0c;很难获得高精度的注释&#xff0c;特别是目标边界周围的注释。我们认为直接使用“嘈杂”的伪装图进行训…

【积累】mysql

mysql mysql查询某i个字段为空或不为空的sql where 字段 is null 或者 where 字段 is not nullchar&#xff1a; where 字段 where 字段 <> 数字&#xff1a; where isnull(字段)将一个表中的数据插入到另一个表中的方法 声明&#xff1a;a&#xff0c;b都是表 如果两个…