📜  C++ STL-priority_queue.top()函数(1)

📅  最后修改于: 2023-12-03 14:39:51.511000             🧑  作者: Mango

C++ STL-priority_queue.top()函数

priority_queue.top()是C++ STL中priority_queue容器的一个成员函数,用于获取priority_queue中最高优先级的元素。

语法:
const T& top() const
  • T:实际存储在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>
  • 对于自定义的数据类型,可以通过重载运算符<来改变排序规则。
代码演示:
示例1:
#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来将较大的元素排在前面。

示例2:
#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从大到小的顺序排序。