📜  C ++ STL中向量的优先级队列及其示例(1)

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

C++ STL中向量的优先级队列及其示例

引言

STL(Standard Template Library)是C ++的一个强大的库,它提供了许多容器(容器是可存储数据的类),并提供了一些有用的算法和函数来处理这些容器。其中之一是优先级队列,它被实现为使用向量(vector)作为底层容器。

优先级队列

优先级队列是一类特殊的队列,它是基于优先级的。元素具有一定优先级,在调用pop()时,具有最高优先级的元素将被删除。在插入元素时,它们将按优先级排序。它是先进先出(FIFO)与后进先出(LIFO)的混合,即堆数据结构。

向量的优先级队列

向量是可变大小的容器,它们是基于数组的数据结构,可以容纳大量的元素。优先级队列使用向量作为底层容器,这意味着在向量上 push_back() 和 pop_back() 操作可执行,其中 pop_back() 用于删除队列中的元素。

使用向量作为底层容器的优点是,它提供了在底层中的快速访问,并且可以存储变长元素类型,而不必指定一个固定的元素大小。

向量的优先级队列是通过指定元素类型及比较准则的优先级队列的特化。

语法:

std::priority_queue <T, std::vector<T>, Compare> pq;
示例

下面是一个简单的示例,从优先级队列中将一些数字移动到向量中,并按升序排序。

#include<bits/stdc++.h>
using namespace std;

void print(priority_queue<int> pq){
    while (!pq.empty()) {
        cout << pq.top() << " ";
        pq.pop();
    }
    cout << endl;
}

int main(){
    priority_queue<int> pq;

    pq.push(10);
    pq.push(20);
    pq.push(15);
    pq.push(5);

    cout << "Priority Queue: ";
    print(pq);

    vector<int> v;

    while (!pq.empty()) {
        v.push_back(pq.top());
        pq.pop();
    }

    sort(v.begin(), v.end());

    cout << "Vector: ";

    for (auto x : v) cout << x << " ";

    return 0;
}

此程序首先将一些数字插入到优先级队列中,然后输出优先级队列。之后,将所有元素从优先级队列转移到向量中,并将向量排序,最后输出向量。

输出:

Priority Queue: 20 15 10 5
Vector: 5 10 15 20
结论

优先级队列是一个非常有用的数据结构,可以用于许多应用程序中,如图形算法、搜索算法等等。向量的优先级队列是优先级队列的一种实现方式,它使用向量作为底层容器。在C ++ STL中,这些容器及其算法已经为我们实现,并可通过简单的语法轻松使用。