有没有一种简单的方法可以在 C++ 中创建最小堆?

发布于 2024-09-01 00:31:16 字数 49 浏览 8 评论 0原文

我对 C++ 非常陌生,我想知道是否有一种方法可以从标准库中创建 C++ 的最小堆。

I'm very new to C++, and I was wondering if there was a way to make a min heap in C++ from the standard library.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

少跟Wǒ拽 2024-09-08 00:31:16

使用 中定义的 make_heap() 及其朋友,或使用 中定义的 priority_queue代码>. priority_queue 使用 make_heap 和下面的朋友。

#include <queue> // functional,iostream,ctime,cstdlib
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(0));
    priority_queue<int,vector<int>,greater<int> > q;
    for( int i = 0; i != 10; ++i ) q.push(rand()%10);
    cout << "Min-heap, popped one by one: ";
    while( ! q.empty() ) {
        cout << q.top() << ' ';  // 0 3 3 3 4 5 5 6 8 9
        q.pop();
    }
    cout << endl;
    return 0;
}

Use make_heap() and friends, defined in <algorithm>, or use priority_queue, defined in <queue>. The priority_queue uses make_heap and friends underneath.

#include <queue> // functional,iostream,ctime,cstdlib
using namespace std;

int main(int argc, char* argv[])
{
    srand(time(0));
    priority_queue<int,vector<int>,greater<int> > q;
    for( int i = 0; i != 10; ++i ) q.push(rand()%10);
    cout << "Min-heap, popped one by one: ";
    while( ! q.empty() ) {
        cout << q.top() << ' ';  // 0 3 3 3 4 5 5 6 8 9
        q.pop();
    }
    cout << endl;
    return 0;
}
忘你却要生生世世 2024-09-08 00:31:16

您可以直接使用 std::make_heapstd::push_heap 等,也可以使用构建在std::vector 或类似的。

std::*_heap 方法位于 中,std::priority_queue 模板位于 中;

You can use std::make_heap, std::push_heap, and others directly, or you can use a std::priority_queue built on a std::vector or similar.

The std::*_heap methods are in <algorithm>, and the std::priority_queue template is in <queue>.

↘紸啶 2024-09-08 00:31:16

您可以使用 std::priority_queue 中定义的 std::greater 中定义。

例如:

#include <iostream>
#include <queue>
#include <vector>
#include <functional>

std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap();
minHeap.push(5);
minHeap.push(1);
minHeap.push(3);
minHeap.push(2);
minHeap.push(4);

while (!minHeap.empty()){
   std::cout << minHeap.top() << std::endl;
   minHeap.pop();
}

这将打印:

1
2
3
4
5

You can use the std::priority_queue defined in with std::greater defined in .

For example:

#include <iostream>
#include <queue>
#include <vector>
#include <functional>

std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap();
minHeap.push(5);
minHeap.push(1);
minHeap.push(3);
minHeap.push(2);
minHeap.push(4);

while (!minHeap.empty()){
   std::cout << minHeap.top() << std::endl;
   minHeap.pop();
}

This will print:

1
2
3
4
5
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文