queue的比较器使用
时间: 2024-04-29 14:19:17 浏览: 9
在C++中,我们可以通过重载运算符<或自定义比较函数来定义priority_queue(优先队列)的排序规则。默认情况下,priority_queue对于基本数据类型是大顶堆,即最大元素在队列的顶部。
如果我们想要定义自己的比较器,可以使用以下方式创建priority_queue:
1. 默认的大根堆:priority_queue<int> q;
2. 小根堆:priority_queue<int, vector<int>, greater<int>> q;
3. 对于自定义的类型,比如pair<string, int>,可以定义一个自定义的比较器cmp,并将其作为priority_queue的第三个参数:
struct cmp {
bool operator()(const pair<string, int>& a, const pair<string, int>& b) {
if(a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
}
};
priority_queue<pair<string, int>, vector<pair<string, int>>, cmp> q;
在自定义比较器cmp中,我们需要重载operator()函数来实现比较规则。在这个例子中,我们按照pair的第二个元素进行降序排序,如果第二个元素相同,则按照第一个元素进行升序排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [一文看懂priority_queue自定义比较函数有几种方法](https://blog.csdn.net/weixin_36389889/article/details/129802998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [priority_queue自定义比较器:topK问题](https://blog.csdn.net/qq_33369979/article/details/108913750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]