Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 底层容器是什么?_C++ - Fatal编程技术网

C++ 底层容器是什么?

C++ 底层容器是什么?,c++,C++,我在一个项目中使用了priority_queue,我决定使用一个functor进行初始化,但在互联网上我发现: std::priority_queue<int, std::vector<int>, std::greater<int> > pq; 我已经使用了它,并且可以工作,但是我不确定为什么在那里使用std::vector,底层的容器是什么,以及如何管理它们。我寻找了一些信息,但我不明白。std::priority\u队列实际上不是一个容器,而是一个容器适

我在一个项目中使用了priority_queue,我决定使用一个functor进行初始化,但在互联网上我发现:

std::priority_queue<int, std::vector<int>, std::greater<int> > pq;
我已经使用了它,并且可以工作,但是我不确定为什么在那里使用std::vector,底层的容器是什么,以及如何管理它们。我寻找了一些信息,但我不明白。std::priority\u队列实际上不是一个容器,而是一个容器适配器,也就是说,它接受一个容器并在其上构建一个不同的接口

底层容器自然就是它所适应的容器。通过使用C++模板魔术,你可以改变STD::矢量到STD::DeQuy,一切都会正常工作。
关于使用什么容器,std::vector与std::deque的原理相同:std::priority_队列部分不包含值,它只是以一种特殊的方式表示它们。

这向我表明优先级队列数据结构使用向量来保存值。它正在使用较大的方法进行排序,以便较高的值首先出现在向量中,并按顺序递减


如果有意义的话,它可以使用另一个数据结构,但在这种情况下,它选择使用向量。

没有帮助吗?优先级队列必须以某种方式保存数据,并且它使用向量。您还可以使用一个列表或任何其他满足需求的内容。您从未管理过这些底层容器,priority_队列会为您管理这些容器。但是priority_队列没有实现为堆?那么为什么要使用向量呢?我想我遗漏了什么…@FranciscoGallegoSalido,它是作为堆实现的,但是你认为堆的内容存储在哪里?它们必须存储在某个地方,而不仅仅是在你的计算机中神奇地浮动。@FranciscoGallegoSalido:堆通常是用来查看线性列表中的对象的。例如,看看std::make_heap函数,它将在任何容器中构建这样一个堆。priority_队列需要随机访问,因此std::list不好。@FranciscoGallegoSalido:因为堆树总是完整的,所以将其存储在线性列表中是有意义的,其中节点n的子节点位于IIRC的位置2*n+1和2*n+2。