📜  如何创建一对 int、int 的最小优先级队列 - C++ (1)

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

如何创建一对 int、int 的最小优先级队列 - C++

在C++中,可以使用STL提供的优先级队列(priority_queue)来实现最小优先级队列。下面是一个示例程序,用于创建一对int、int的最小优先级队列。

#include <iostream>
#include <queue>

using namespace std;

int main() {
    // 创建一个最小优先级队列
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;

    // 向队列中插入元素
    pq.push(make_pair(10, 20));
    pq.push(make_pair(15, 8));
    pq.push(make_pair(5, 9));

    // 输出队列中的元素
    while (!pq.empty()) {
        cout << pq.top().first << ", " << pq.top().second << endl;
        pq.pop();
    }

    return 0;
}

代码说明:

  1. 首先,我们需要头文件,其中头文件中包含了优先级队列(priority_queue)的定义。
  2. 接着,我们定义了一个名为pq的最小优先级队列,其元素类型为pair<int,int>(即二元组,一对int类型的数据),容器类型为vector,比较函数类型为greater<pair<int,int>>(即大于号<号的反函数,即从小到大排序)。
  3. 然后,我们使用push()函数向队列中插入三个元素,每个元素都是由make_pair()函数构造出的一对int型数据。
  4. 最后,我们使用top()函数获取队列的队首元素,并使用pop()函数弹出队首元素,直到队列为空。

以上程序会输出以下结果:

5, 9
10, 20
15, 8

这是因为我们定义的最小优先级队列是按照第一个int型数据(即pair中的first)从小到大排序的,相同的情况下按照第二个int型数据(即pair中的second)从小到大排序。

注意:对于pair类型的数据,我们可以使用make_pair()函数来创建,它会自动将两个参数封装成一个pair对象。另外,vector容器是优先级队列的底层容器,它用于存储元素,因此我们需要在模板参数中指定为vector<pair<int,int>>。