c++ priority queue,c++ 优先级队列

c++ priority queue,c++ 优先级队列,c++优先队列(priority_queue)用法详解

本文主要介绍priority _ queue(C _ priority _ queue)用法的详细说明,通过示例代码详细介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。

公共队列是一种先进先出的数据结构,其中的元素被附加在队列的末尾,从队列的开头删除。

在优先级队列中,元素被赋予优先级。当访问一个元素时,具有最高优先级的元素首先被删除。优先级队列具有先进先出的行为特征。

首先要包含头文件#includequeue,它和queue的区别在于我们可以自定义其中数据的优先级,让优先级最高的排在队列前面,先出列。

优先级队列具有队列的所有特征,包括队列的基本操作,但在此基础上增加了一个内部排序,本质上是通过堆来实现的。

队列的基本操作是相同的:

顶部访问队列头元素

空队列是空的?

Size返回队列中元素的数量。

将元素推到队列的末尾(并排序)

就位构造一个元素并将其插入到队列中。

弹出队列头元素

交换交换内容

定义:优先级队列类型,容器,函数

Type是数据类型,Container是容器类型。(容器必须是用数组实现的容器,比如vector、deque等。但不能使用list。Vector)在STL中默认使用,函数式是比较的方式。

当需要用户定义的数据类型时,需要传入这三个参数。当使用基本数据类型时,只需要传入该数据类型,默认为Big Top Heap。

一般来说:

//升序队列

priority_queue int,vectorint,greater int q;

//降序队列

priority_queue int,vectorint,less int q;

//greater和less是std实现的两个模仿函数(就是让类的使用看起来像函数。它的实现是在一个类中实现一个运算符(),这个类的行为会像一个函数,即仿函数类)。

1.基本类型优先级队列的示例:

#includeiostream

#包括队列

使用命名空间std

int main()

{

//对于基类型,默认为大顶堆。

priority _ queue int a;

//相当于priority _ queue int,vector int,减去int a;

//这里一定要有空格,否则会变成右移运算符

priority_queueint,vectorint,greater int c;//这是小顶桩。

priority _ queue string b;

for(int I=0;i5;我)

{

a .推(一);

c .推(一);

}

而(!a.empty())

{

cout a . top()“”;

a . pop();

}

cout endl

而(!c.empty())

{

cout c . top()“”;

c . pop();

}

cout endl

b . push(' ABC ');

b . push(' ABCD ');

b . push(' CBD ');

而(!b.empty()

{

cout b . top()“”;

b . pop();

}

cout endl

返回0;

}

运行结果:

4 3 2 1 0

0 1 2 3 4

中央商务区

请按任意键继续。

2、用pair做优先队列元素的例子:

规则:成对比较,先比较第一个元素,第一个元素等于第二个元素。

#包括iostream

#包括队列

#包含矢量

使用命名空间std

int main()

{

priority_queuepairint,int a;

pairint,int b(1,2);

pairint,int c(1,3);

pairint,int d(2,5);

a .推(d);

a .推(c);

a .推(b);

而(!a.empty())

{

cout a.top()。第一个“”a.top()。第二个“\ n”;

a . pop();

}

}

运行结果:

2 5

1 3

1 2

请按任意键继续。

3、用自定义类型做优先队列元素的例子

#包括iostream

#包括队列

使用命名空间std

//方法1

结构tmp1 //运算符的重载

{

int x;

TM P1(int a){ x=a;}

布尔运算符(const tmp1 a) const

{

返回x a.x//大顶堆

}

};

//方法2

Struct tmp2 //重写模仿函数

{

布尔运算符()(tmp1 a,tmp1 b)

{

返回a . x b . x;//大顶堆

}

};

int main()

{

tmp1 a(1);

tmp1 b(2);

tmp1 c(3);

priority _ queuetmp1 d;

d .推(b);

d .推(c);

d .推(一);

而(!d.empty())

{

cout d.top()。x ' \ n

d . pop();

}

cout endl

priority_queuetmp1,vectortmp1,tmp 2 f;

f .推(b);

f .推(c);

f .推(a);

而(!空())

{

cout f.top()。x ' \ n

f . pop();

}

}

运行结果:

2

一个

2

一个

请按任意键继续。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: