priorityQueue优先级队列 (python、c++)

2023-11-01

优先级队列


最近用优先队列写了一个SNIC超像素分割的工程,有兴趣的可以下载看看。(VIP大佬让我赚一点下载积分吧,感激不尽)
https://download.csdn.net/download/koffee_f/10767813
之前觉得速度很慢,原来是因为一个cout没有删掉。删掉之后在release下跑很快。

优先级队列

队列就是一个先进先出(FIFO)的结构,而优先级队列则是对队列里的每一个元素设置一个优先级,取元素时先获得优先级最高的一个元素。在python和c++里都有库可以调用。(java里应该也有,但是我不会java,所以算了吧。)

今天看了SNIC超像素分割的一个程序,“每次取距离中心最近的点”这个操作,想想就很麻烦。研究发现把距离设置成优先级,然后用一个队列就解决了。对基于SDF网格的三维重建,可能也会碰到类似的需要对网格排序的情况。库帮忙自动维护这些数据,实在是太方便了。

具体的逻辑这个博客讲的非常好,有空再研究。
https://blog.csdn.net/qq_35326718/article/details/72866180
先简单记录一下怎么用

python

直接用SNIC里面的例子吧

from Queue import PriorityQueue

Q=PriorityQueue()
Q=putinQ(ck,Q,numk) #初始化Q
class NODE(object):
    def __init__(self,priority,description1,description2,description3):
        distance=int()
        xk=int()
        yk=int()
        k=int()
        self.priority=distance
        self.description1=xk
        self.description2=yk
        self.description3=k
    def __cmp__(self,other):
        return cmp(self.priority,other.priority)#优先级队列

def putinQ(ck,Q,numk):
    for k in range(numk):
        tempnode=NODE(0.0,1,1,1)
        tempnode.priority=0.0
        tempnode.description1=ck[k][0]
        tempnode.description2=ck[k][1]
        tempnode.description3=k
        Q.put(tempnode)
    return(Q)

#获得Q里的元素
Q.get();
#加入元素
Q.put(a);
#Q的长度
Qlength=Q.qsize()

C++

这么方便的东西STL里就有,只要include “queue” 就可以了
转载自 https://blog.csdn.net/baidu_35643793/article/details/70173709

#include<queue>  
using namespace std;
priority_queue<int> big;  //大根堆  
priority_queue<int,vector<int>,greater<int> > small;  //小根堆,最后的两个“>”之间要有空格,vector不用单另开头文件。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
 
struct node
{
    int s,b;
    bool operator < (const node &x) const
    {
        if(x.s!=s)
            return x.s>s;     //从小到大
        else
            return x.b<b;     //从大到小
    }
 
}A[100];
 
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&A[i].s,&A[i].b);
    }
    sort(A+1,A+1+n);
    for(int i=1;i<=n;i++)
    {
        printf("%d %d\n",A[i].s,A[i].b);
    }
    return 0;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

priorityQueue优先级队列 (python、c++) 的相关文章

随机推荐

  • java实现----sql解析器

    更新中 首先我们项目要编写一个小型的dbms 所以我负责编写的sql解析的部分 所以本文只是记录我学习和编写sql解析器的过程
  • 大型网站架构之架构模式

    上节讲了大型网站的演变 今天讲下架构的模式 什么是模式呢 每一个模式描述了一个再我们周围不断重复发生的问题及问题解决方案的核心 这样你就能一次次重用该方案而不必去做重复的工作 可见模式的关键在于可重复性 网站架构模式的目标 面临高并发访问
  • element-ui中文官方文档入口

    点击下面链接 element ui点我跳转中文文档链接
  • 小区视频监控系统

    一 方案概述 名称 小区视频监控系统设计方案 内容 现在高档小区在大中小城市遍布各个角落 每天进出这些小区人形形色色 人们的居住环境应该有所保障 加上小区内部的高档配置硬件更应如此 但是仅仅靠人力所为是不现实的 人力成本 维护成本 效率低下
  • Git技能树(3):Git使用

    Git技能树 3 Git使用 在开始 Git 的基础命令学习之前 我们先来认识一下版本库 Repository 接下来我们所有提到的 Git 基础命令 都是基于版本库的 那么什么是版本库呢 版本库又名仓库 英文名 repository 你可
  • mybatis-plus更新数据updateById返回false

    Packet byId ips getById 211l System out println byId Packet pa new Packet pa setId byId getId pa setStatus 1 pa setVersi
  • 霍夫投票直观理解

    霍夫投票法最典型的示例是二维图像中霍夫直线检测 过二维平面中的定点可以得到无数条直线 如果以顶点参数为做一条直线 即将这些直线变换到参数空间 那么这个定点对应参数空间中的一条直线 如果在参数空间中有两条直线相交于同一个点 那么说明对应的两个
  • Unity排行榜功能(使用MVC框架)

    要求 实现如图所示UI界面 按下某一按键实现排行榜的更新 M 数据模型类 主要负责数据 玩家的数据 public class RankModel 定义三个属性 姓名 分数 排名 定义构造函数 public string Name set g
  • 基于arduino下的巡线小车

    先发代码再进行解释吧 include
  • 《Head First HTML5 javascript》第10章 自定义对象

    2022 11 23 第10章 自定义对象 面向对象OOP Object Oriented Programming 对象是一个包含相关数据和方法的集合 通常由一些变量和函数组成 我们称之为对象里面的属性和方法 对象是存储在单个分组中的相关功
  • Git统计个人提交代码行数

    1 Git统计个人提交代码行数 git log format aN sort u while read name do echo en name t git log author name pretty tformat numstat aw
  • Windows系统文件快捷链接(软链接/硬链接/符号链接)mklink

    记录学习mklink 将大文件从c盘移出 快捷方式 软链接 硬链接 符号链接 快捷方式 常见文件链接方式 在Windows上以 lnk结尾的文件 这类文件通常用于指定某一个文件或某一个目录的位置 可扩展性很强 桌面快捷方式就是这类了 软链接
  • Ubuntu Openvino(YOLOV5)加载训练好的模型 xml onnx bin

    使用 Openvino 对自己训练好的模型yolov5 pt gt IR 进行推理 环境需求 Ubuntu 系统 20 04 vscode 编辑器 python3 Openvino 环境 priority 关键为 export 导出的修改
  • Libvirt简介

    Libvirt 是一个函数库 包含实现Linux虚拟化功能的linux API 提供了管理虚拟机的稳定的 统一的接口 其主要包括Libvirt API Libvirtd进程和virsh工具集三个部分 架构说明 用户程序 程序 virsh工具
  • Flutter基础(手势检测GestureDetector)-二

    import package flutter material dart void main runApp new MaterialApp title flutter质感设计 home new MyButton class MyButton
  • 核工业物理研究院九院三所

    1 流体物理研究所 一所 高能量密度流体力学过程 爆轰压缩 凝聚态 辐射流体力学等 可以说包括了核武器设计的基础理论部分和核试验 亚临界试验等的试验数据采集分析 2 核物理与化学研究所 二所 核物理 放射化学 核过程等 就是核反应堆技术 核
  • mongo 常用的命令

    一个mongod服务可以有建立多个数据库 每个数据库可以有多张表 这里的表名叫collection 每个collection可以存放多个文档 document 每个文档都以BSON binary json 的形式存放于硬盘中 因此可以存储比
  • 虚拟网络无法连接本机网络(Xshell无法连接虚拟机)

    Xshell无法连接虚拟机 类似于 Could not connect to 192 168 0 128 port 22 Connection failed 在很多博客中也看到过许多解决方法 例如 安装sshd的客户端 服务端 给sshd的
  • 华为mate30老是显示无法连接服务器,华为Mate30 Pro手机微信信息老是发不出,提示无法连接到网络...

    华为Mate30 Pro手机的微信信息老是发不出 并且在接收微信消息的有延迟 信号满格 时常提示无法连接到网络 微信时常半天发不出 发个东西转半天 接收也经常延迟几分钟才收到提醒 这是什么鬼手机啊 别人发来消息 一来就是好多条 还有十来分钟
  • priorityQueue优先级队列 (python、c++)

    优先级队列 优先级队列 python C 最近用优先队列写了一个SNIC超像素分割的工程 有兴趣的可以下载看看 VIP大佬让我赚一点下载积分吧 感激不尽 https download csdn net download koffee f 1