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

黄骅港神华集团招聘信息临沂百度seo

黄骅港神华集团招聘信息,临沂百度seo,郉台网站建设,无锡营销型网站std::priority_queue 是 C STL 提供的 优先队列,它是一种 最大堆(默认情况下),可以用于高效地获取当前最大(或最小)的元素。 1. 基本用法 (1) 头文件 要使用 std::priority_queue,需要包含&am…

std::priority_queue 是 C++ STL 提供的 优先队列,它是一种 最大堆(默认情况下),可以用于高效地获取当前最大(或最小)的元素。


1. 基本用法

(1) 头文件

要使用 std::priority_queue,需要包含:

#include <queue>
#include <vector>
#include <iostream>

(2) 默认情况(最大堆)

默认情况下,std::priority_queue最大堆,即 堆顶是最大元素

std::priority_queue<int> pq;  // 默认是最大堆

示例:

#include <iostream>
#include <queue>int main() {std::priority_queue<int> pq;pq.push(10);pq.push(30);pq.push(20);std::cout << "堆顶元素:" << pq.top() << std::endl;  // 输出 30pq.pop();  // 移除 30std::cout << "新的堆顶:" << pq.top() << std::endl;  // 输出 20return 0;
}

特点

  • push() 插入元素,自动维护最大堆。
  • top() 获取当前最大元素(堆顶)。
  • pop() 移除堆顶元素(但不返回它)。
  • size() 获取队列大小。
  • empty() 检查队列是否为空。

2. 自定义最小堆

如果要实现 最小堆(堆顶是最小元素),可以用 std::greater<T>

std::priority_queue<int, std::vector<int>, std::greater<int>> pq_min;

示例:

#include <iostream>
#include <queue>int main() {std::priority_queue<int, std::vector<int>, std::greater<int>> pq_min;pq_min.push(10);pq_min.push(30);pq_min.push(20);std::cout << "堆顶元素:" << pq_min.top() << std::endl;  // 输出 10pq_min.pop();std::cout << "新的堆顶:" << pq_min.top() << std::endl;  // 输出 20return 0;
}

重点

  • std::greater<int> 使 priority_queue 变成 最小堆

3. 自定义比较函数(结构体/仿函数)

(1) 结构体仿函数

struct Compare {bool operator()(int a, int b) {return a > b;  // 最小堆(a > b 表示 a 在 b 下面)}
};
std::priority_queue<int, std::vector<int>, Compare> pq;

示例:

#include <iostream>
#include <queue>struct Compare {bool operator()(int a, int b) {return a > b;  // 让小的元素优先级高}
};int main() {std::priority_queue<int, std::vector<int>, Compare> pq;pq.push(10);pq.push(30);pq.push(20);std::cout << "堆顶元素:" << pq.top() << std::endl;  // 输出 10pq.pop();std::cout << "新的堆顶:" << pq.top() << std::endl;  // 输出 20return 0;
}

优点

  • 适用于复杂的数据结构(如 struct)。
  • 允许灵活定义优先级。

4. 处理结构体类型

如果 priority_queue 存储的是 自定义结构体,需要提供比较规则。

(1) 按权重排序的任务调度

#include <iostream>
#include <queue>struct Task {int id;int priority;// 重载运算符,用于最大堆(优先级大的优先)bool operator<(const Task& other) const {return priority < other.priority;  // 优先级高的排前面}
};int main() {std::priority_queue<Task> pq;pq.push({1, 3});pq.push({2, 5});pq.push({3, 1});std::cout << "最高优先级任务 ID:" << pq.top().id << std::endl;  // 输出 2pq.pop();std::cout << "新的最高优先级任务 ID:" << pq.top().id << std::endl;  // 输出 1return 0;
}

特点

  • 默认是最大堆,因此 operator< 定义为 优先级小的在下面

(2) 使用自定义比较函数

如果不能修改 struct,可以使用 外部比较函数

struct CompareTask {bool operator()(const Task& a, const Task& b) {return a.priority > b.priority;  // 最小堆}
};std::priority_queue<Task, std::vector<Task>, CompareTask> pq;

完整示例:

#include <iostream>
#include <queue>struct Task {int id;int priority;
};// 使 priority_queue 变成最小堆
struct CompareTask {bool operator()(const Task& a, const Task& b) {return a.priority > b.priority;  // 小优先级的任务优先}
};int main() {std::priority_queue<Task, std::vector<Task>, CompareTask> pq;pq.push({1, 3});pq.push({2, 5});pq.push({3, 1});std::cout << "最高优先级任务 ID:" << pq.top().id << std::endl;  // 输出 3pq.pop();std::cout << "新的最高优先级任务 ID:" << pq.top().id << std::endl;  // 输出 1return 0;
}

适用场景

  • 优先队列调度算法
  • 事件驱动仿真
  • A 搜索(最短路径算法)*

5. priority_queue 适用场景

应用场景用法
最大堆(默认)std::priority_queue<int>
最小堆std::priority_queue<int, std::vector<int>, std::greater<int>>
存储结构体(最大堆)结构体重载 <
存储结构体(最小堆)std::greater<> 或自定义 Compare
K 大/小元素维护大小为 K 的堆
Dijkstra / A 搜索*结合 std::pair<int, int> 进行路径计算

6. 经典应用示例

(1) 找到前 K 个最大元素

#include <iostream>
#include <queue>
#include <vector>void findTopK(std::vector<int>& nums, int k) {std::priority_queue<int, std::vector<int>, std::greater<int>> pq; // 最小堆for (int num : nums) {pq.push(num);if (pq.size() > k) pq.pop();  // 只保留 k 个最大值}std::cout << "前 " << k << " 个最大元素:" << pq.top() << std::endl;
}int main() {std::vector<int> nums = {3, 1, 5, 12, 2, 11};findTopK(nums, 3);  // 输出 5
}

复杂度O(N log K)


总结

  • std::priority_queue 默认是 最大堆,可以用 std::greater<> 实现 最小堆
  • 存储结构体时,可以使用 重载 < 运算符自定义比较器
  • 适用于 任务调度、路径搜索(Dijkstra/A)等场景*。
http://www.dtcms.com/wzjs/267396.html

相关文章:

  • 专业做网站建设 昆山百度快照如何优化
  • 临沂企业网站建设百度网络推广怎么收费
  • php商城网站建设多少钱郑州网站运营实力乐云seo
  • 照片编辑软件宁波seo整体优化公司
  • wordpress加速器嘉兴seo报价
  • 怎么查看网站使用空间网络推广图片大全
  • 怎样自做网站如何免费制作自己的网站
  • 怎么样做国外推广网站写文案接单平台
  • 做网站运营工资多少seo是网络优化吗
  • 软件开发需求分析模板百度seo霸屏软件
  • 网站推广包括如何制作链接推广
  • mm131网站用什么软件做的网站建设方案模板
  • 公司怎么在百度做网站腾讯广告投放平台官网
  • 美女做暖暖视频免费网站百度网站推广怎么做
  • 淘宝客如何建设自己的网站怎么做谷歌推广
  • 做网站 多少钱品牌营销的概念
  • 高品质网站建设百度新版本更新下载
  • 免费公司网站申请免费发外链的网站
  • 海外网站导航东莞优化排名推广
  • 王野天女演员葛优照片公司seo推广营销网站
  • 怎么做合买彩票网站百度口碑官网
  • 如何做品牌网站设计东莞服务好的营销型网站建设
  • 自己建设网站赚钱怎样申请网站注册
  • 帝国小说网站模板大作设计网站
  • 泰安建设网站google推广妙招
  • 12个 网站模板 管理网站seo优化外包
  • wap手机网站模板网站免费搭建
  • o2o网站系统建设今日刚刚发生的国际新闻
  • 珠江摩尔网站建设搜收录网
  • kindeditor wordpress揭阳seo快速排名