文档章节

c++优先队列 less和greater

元禛慎独
 元禛慎独
发布于 2017/01/20 17:53
字数 245
阅读 52
收藏 0

c++  中的容器 优先队列(priority_queue) 主要有两种排列方式  默认的less 和  greater

less 表示容器中的数据是 由大到小进行排列的

greater 表示容器中的数据是 由小到大进行排列的

那么也就意味着  less模式下,优先输出的较大的数值, greater模式下优先输出的较小的数值;

如下示例:

#include <functional>
#include <queue>
#include <vector>
#include <iostream>
 
template<typename T> void print_queue(T& q) {
    while(!q.empty()) {
        std::cout << q.top() << " ";
        q.pop();
    }
    std::cout << '\n';
}
 
int main() {
    std::priority_queue<int> q;
 
    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q.push(n);
 
    print_queue(q);
 
    std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
 
    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q2.push(n);
 
    print_queue(q2);
 }

输出:

9 8 7 6 5 4 3 2 1 0  // less
0 1 2 3 4 5 6 7 8 9   //greater

可以对自定义操作符(>或 <)

struct node
{
    bool operator< (const node n1, const node n2)
    {
        return n1.priority < n2.priority;
    }
    int priority;
    int value;
}; 
struct node
{
    bool operater < (const struct node &k)
    const{
        priority < k.priority;
    }
    int priority, value;
}     //两种自定义方式是等价的

 

 

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
浅谈C++ STL中的优先队列(priority_queue)

从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的。 今天讲一讲优先队列(priority_queue...

shzwork
03/09
4
0
Priority_Queue(优先队列)

我们都知道,队列是一种FIFO的数据结构,规定在队尾增加元素,在队首删除元素,和食堂排队打饭一个道理。(当然,插队的人是很鄙视的)。而在优先队列中,每个元素却有了特权,被赋予了优先级...

回忆酿的甜
01/22
0
0
数据结构&堆&heap&priority_queue&实现

目录 什么是堆? 大根堆 小根堆 堆的操作 STL queue 什么是堆? 堆是一种数据结构,可以用来实现优先队列 大根堆 大根堆,顾名思义就是根节点最大。我们先用小根堆的建堆过程学习堆的思想。 ...

Chicago_01
2018/09/21
0
0
UVA ~ 11995 ~ I Can Guess the Data Structure! (模拟)

题意:你有一个类似“包包”的数据结构,支持两种操作,如表3-1所示。 □1 x,把元素x放进包包 □2 从包包中拿出一个元素 给出一系列操作以及返回值,你的任务是猜猜这个“包包”到底是什么。...

zscdst
2018/05/02
0
0
关于Nebula3工程的几个编译选项

研究一下人家是怎么通过编译选项来优化性能的 DEBUG: C++/Code Generation/Enable String Pooling: Yes (/GF) 该选项使编译器能够为执行过程中程序映像和内存中的相同字符串创建单个副本,从...

长平狐
2012/11/12
89
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
26分钟前
8
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
57分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
59分钟前
10
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
今天
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部