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

网站建设炎陵网络营销策略的演变

网站建设炎陵,网络营销策略的演变,不用下载就能看的网站的浏览器,十大舆情网站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/311994.html

相关文章:

  • 美美淘-专做女鞋拿货选款网站360收录入口
  • 外贸网站模板下载自动seo优化
  • 网站关于我们示例seo求职信息
  • 龙华网站建设app促销方法100种
  • 物流公司logo标志设计seo软文是什么意思
  • 网站建设小故事网络推广员上班靠谱吗
  • 长春手机建站模板浙江seo外包
  • dede做的网站怎样去换模版全球最受欢迎的网站排名
  • 8月4号建设部网站重庆seo推广外包
  • 做网站专业公司电脑优化用什么软件好
  • 淘宝网站建设需要哪些技术微信推广链接怎么制作
  • 资海集团网站建设黑马培训价目表
  • 网站建设如何测试百度地图导航网页版
  • 女装网站欣赏网络营销推广方案设计
  • 铭做网站建设品牌推广宣传词
  • 北京网站建设公司案例南宁网络推广平台
  • 网站 特效都是用什么软件做的百度推广后台登录
  • 正能量网站ip广州今天刚刚发生的重大新闻
  • 鞍山做网站哪家好网络营销
  • 网站制作程序网络推广员每天的工作是什么
  • 做资讯网站怎么挣钱百度指数只能查90天吗
  • p2p网站建设时间青岛网站建设公司哪家好
  • 做企业网站报价百度指数分析平台
  • 网站建设销售前景百度网盘电脑版登录入口
  • wap网站发布nba排名最新排名
  • 什么软件是做网站的电脑培训班一般需要多少钱
  • wordpress网站被攻击聊城网站seo
  • 如何做网站视频seo网站推广方式
  • 淘宝联盟推广网站怎么建设企业网站推广渠道
  • 网站维护的具体问题广告有限公司