📅  最后修改于: 2023-12-03 14:39:51.511000             🧑  作者: Mango
priority_queue.top()
是C++ STL中priority_queue
容器的一个成员函数,用于获取priority_queue
中最高优先级的元素。
const T& top() const
priority_queue
中的数据类型,可以是任何可排序的数据类型,默认使用less<T>
作为排序规则。const T&
:返回priority_queue
中最高优先级的元素的引用(常量)。#include <iostream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> pq;
pq.push(3);
pq.push(1);
pq.push(4);
pq.push(1);
pq.push(5);
cout << "pq.top() = " << pq.top() << endl; // 输出:pq.top() = 5
return 0;
}
在以上示例中,我们创建了一个priority_queue
容器,向其中插入了一些元素。然后使用pq.top()
获取了元素中最高优先级的元素并输出。
priority_queue
中的元素默认使用less<T>
作为排序规则,即将较小的元素排在前面。可以通过以下两种方式改变排序规则:
greater<T>
替换less<T>
。<
来改变排序规则。#include <iostream>
#include <queue>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
pq.push(3);
pq.push(1);
pq.push(4);
pq.push(1);
pq.push(5);
cout << "pq.top() = " << pq.top() << endl; // 输出:pq.top() = 1
return 0;
}
在以上示例中,我们通过自定义比较函数cmp
来将较大的元素排在前面。
#include <iostream>
#include <queue>
using namespace std;
class Data {
public:
int id;
string name;
bool operator< (const Data &rhs) const {
return id < rhs.id;
}
};
int main() {
priority_queue<Data> pq;
pq.push({3, "aaa"});
pq.push({1, "ccc"});
pq.push({4, "bbb"});
pq.push({1, "ddd"});
pq.push({5, "eee"});
Data top_data = pq.top();
cout << "pq.top() = {" << top_data.id << ", " << top_data.name << "}" << endl;
// 输出:pq.top() = {5, eee}
return 0;
}
在以上示例中,我们自定义了一个数据类型Data
,并重载<
运算符。通过自定义operator<
函数,我们将较大的元素排在前面,从而实现了按照id从大到小的顺序排序。