当前位置: 首页 > news >正文

C++容器priority_queue

C++容器priority_queue

  • 定义
  • 构造函数
    • 1、默认构造函数
    • 2、带有比较函数的构造函数
    • 3、区间构造函数
    • 4、组合构造函数
    • 5、拷贝构造函数
    • 6、移动构造函数
  • 常用函数

定义

一种特殊的队列,其中的元素并非按照“先进先出”(FIFO)的顺序排列,而是根据元素的优先级来决定出队顺序。优先级最高的元素总是位于队列的前端

  • 最大堆(默认)priority_queue 默认实现为一个最大堆(max-heap),即最大的元素(根据比较规则)拥有最高优先级,位于队首。
  • 堆结构:底层通常使用 std::vector 实现,并通过堆(通常是二叉堆)的性质来维护元素的顺序。
  • 访问限制:你只能访问和移除优先级最高的那个元素(队首)。不能遍历整个队列,也不能直接访问其他元素。
  • 动态大小:大小可以动态增长
  • 只能通过top函数获取元素

构造函数

1、默认构造函数

int main()
{system("chcp 65001");// 默认构造函数priority_queue<int> queue1;queue1.push(1);queue1.push(33);queue1.push(2);while (!queue1.empty()){cout << "queue1-> " << queue1.top() << endl;queue1.pop();}
}

2、带有比较函数的构造函数

int main()
{system("chcp 65001");// 带有自定义比较函数的构造函数std::priority_queue<int, std::vector<int>, std::greater<int>> queue1;queue1.push(1);queue1.push(33);queue1.push(2);while (!queue1.empty()){cout << "queue1-> " << queue1.top() << endl;queue1.pop();}
}

3、区间构造函数

int main()
{system("chcp 65001");// 区间构造函数std::vector<int> vec = { 3, 1, 4, 11, 5, 9 };std::priority_queue<int> queue1(vec.begin() + 1, vec.end() - 1);queue1.push(1);queue1.push(33);queue1.push(2);while (!queue1.empty()){cout << "queue1-> " << queue1.top() << endl;queue1.pop();}
}

4、组合构造函数

int main()
{system("chcp 65001");// 组合构造函数std::vector<int> vec = { 3, 1, 4, 11, 5, 9 };auto comp = [](int a, int b) { return a > b; };std::priority_queue<int, std::vector<int>, decltype(comp)> queue1(vec.begin(), vec.end(), comp);queue1.push(1);queue1.push(33);queue1.push(2);while (!queue1.empty()){cout << "queue1-> " << queue1.top() << endl;queue1.pop();}
}

5、拷贝构造函数

int main()
{system("chcp 65001");std::priority_queue<int> queue1;queue1.push(1);queue1.push(33);queue1.push(2);// 拷贝构造函数std::priority_queue<int> queue2(queue1);while (!queue2.empty()){cout << "queue1-> " << queue2.top() << endl;queue2.pop();}
}

6、移动构造函数

int main()
{system("chcp 65001");std::priority_queue<int> queue1;queue1.push(1);queue1.push(33);queue1.push(2);// 移动构造函数std::priority_queue<int> queue2(std::move(queue1));while (!queue2.empty()){cout << "queue1-> " << queue2.top() << endl;queue2.pop();}
}

常用函数

函数描述
push(value)将 value 插入优先队列。时间复杂度 O(log n)
emplace(args...)在容器内就地构造一个元素并插入。比 push 更高效,不用复制。O(log n)
pop()移除优先级最高的元素(队首元素)。时间复杂度 O(log n)
top()返回优先级最高元素(队首元素)的常量引用。时间复杂度 O(1。
empty()如果队列为空,返回 true。O(1)
size()返回队列中元素的数量。O(1)
swap(other)与另一个 priority_queue 交换内容。O(1)
int main()
{system("chcp 65001");std::priority_queue<int> queue1;queue1.push(1);queue1.push(33);queue1.push(2);queue1.emplace(15);cout << "queue1.size()-> " << queue1.size() << endl;cout << "queue1.empty()-> " << boolalpha << queue1.empty() << endl;while (!queue1.empty()){cout << "queue1-> " << queue1.top() << endl;queue1.pop();}
}
http://www.dtcms.com/a/531916.html

相关文章:

  • [linux仓库]打开线程的“房产证”:地址空间规划与分页式管理详解[线程·壹]
  • 昆明网站建设询力鼎科技做电商怎么找货源
  • 园区网站建设中山网站建设文化案例
  • 【算法速成课 3】康托展开(Cantor Expansion)/ 题解 P3014 [USACO11FEB] Cow Line S
  • 【java面向对象进阶】------抽象类+接口 综合实例
  • 自然语言处理实战——英法机器翻译
  • 图数据库系统学习指南(从入门到进阶)
  • 信息服务平台网站西峰住房和城乡建设局网站
  • 影像生成评估指标FID
  • 【金仓数据库】ksql 指南(三) —— 创建与管理表空间和模式
  • 高并发内存池 - 开发记录07
  • 品牌网站建设平台杭州排名优化公司
  • 做网站用的笔记本配置检测asp网站死循环
  • 建材公司网站建设方案金融网站建设方案ppt
  • 零基础从头教学Linux(Day 56)
  • 世冠科技2025复杂装备数智化研发与运维技术研讨会暨 GCKontrol GCAir 10.0 版本产品发布会圆满落幕
  • Qt6 学习——一个Qt桌面应用程序
  • 【Linux】传输层协议TCP
  • 前端监控:错误捕获与行为日志全解析
  • 第一部分:网络基础
  • Socket详解
  • Ceph存储
  • [人工智能-大模型-87]:模型层技术 - “神经网络架构演进的全景地图”,“从简单到复杂、从单一到智能” - 通俗易懂版。
  • windows 2003 取消网站访问密码wordpress黑镜百度云盘
  • Spring Boot3零基础教程,自定义 starter,把项目封装成依赖给别人使用,笔记65
  • 建设足球网站的心得和意义渠道分销管理系统
  • 【PLC】汇川InoTouchPad在Win11上显示太小
  • OpenHarmony蓝牙技术全解析:从设备发现到数据传输的完整流程
  • 解压版MySQL的安装与卸载
  • C++编程基础(五):字符数组和字符串