Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
STL iterable类容器优先级队列 我对STL容器(通常是C++)是新的,所以我想我会向社区寻求帮助。我基本上希望有一个支持不断迭代的优先级队列。现在看来,std::priority\u queue不支持迭代,所以我不得不使用其他东西,但我不确定具体是什么_C++_Stl_Containers_Priority Queue - Fatal编程技术网

STL iterable类容器优先级队列 我对STL容器(通常是C++)是新的,所以我想我会向社区寻求帮助。我基本上希望有一个支持不断迭代的优先级队列。现在看来,std::priority\u queue不支持迭代,所以我不得不使用其他东西,但我不确定具体是什么

STL iterable类容器优先级队列 我对STL容器(通常是C++)是新的,所以我想我会向社区寻求帮助。我基本上希望有一个支持不断迭代的优先级队列。现在看来,std::priority\u queue不支持迭代,所以我不得不使用其他东西,但我不确定具体是什么,c++,stl,containers,priority-queue,C++,Stl,Containers,Priority Queue,要求: 维护插入时的顺序(如优先级队列) 从列表顶部弹出 获取对列表中每个元素的常量访问权限(不关心此阶段队列中的顺序) 一种选择是保持一个优先级队列,并分别拥有一组无序的引用,但我不希望有两个容器四处浮动。我也可以使用deque搜索正确的插入位置,但如果可能的话,我宁愿让容器为我管理排序(固定时间插入比线性时间更好)。有什么建议吗?您可以使用(有序)集合作为队列。set.begin()将是您的顶级元素,您可以通过擦除(set.begin())将其弹出。您会想到两个选项: 1) 使用std:

要求:

  • 维护插入时的顺序(如优先级队列)
  • 从列表顶部弹出
  • 获取对列表中每个元素的常量访问权限(不关心此阶段队列中的顺序)

一种选择是保持一个
优先级队列
,并分别拥有一组
无序的引用
,但我不希望有两个容器四处浮动。我也可以使用
deque
搜索正确的插入位置,但如果可能的话,我宁愿让容器为我管理排序(固定时间插入比线性时间更好)。有什么建议吗?

您可以使用(有序)集合作为队列。set.begin()将是您的顶级元素,您可以通过擦除(set.begin())将其弹出。

您会想到两个选项:

1) 使用
std::vector
和堆操作算法实现您自己的iterable优先级队列(请参阅堆操作


2) 从
优先级队列
派生(私下)。这使您可以通过数据成员
c
访问底层容器。然后,您可以在公共接口中公开迭代、随机访问和其他感兴趣的方法。

正如其他人已经指出的那样,使用std::vector可能就足够了,但是如果您想要已经准备好的实现,可以使用Boost.Heap(这是一个具有多个优先级队列容器的库):


Boost是一个基本上完成了标准库(不是很大)的库集合。很多C++开发者在需要时都会在他们的DEV计算机上使用准备。在选择库时要小心。

您观察过heap()吗?它在队列内部没有顺序,但具有您需要的优先级“从列表顶部弹出”。

快速注意——插入优先级队列需要日志时间,而不是常数。此外,它并没有对队列进行排序。这只是保持最少的元素在上面。很高兴知道。我想我对内部实现做了一些(错误的)假设。不错,我不知道这些。我们已经在为这个项目使用Boost,所以我来看看。不过,我在为TS-7800编译Boost容器时遇到了麻烦,因此如果失败,我将不得不尝试其他选项。这不是OP想要的。他们需要一个堆实现
std::set
很可能不是作为堆实现的。我有Java背景,对我来说,对集合进行排序的想法听起来是错误的(我正在寻找一个排序集,但没有找到;我猜这就是为什么会有
unordered\u set
@paddy“heap”这个词的原因)没有出现在OP问题中,他希望优先队列和SET支持所有需要的功能。@ PaDeTrar,虽然我不需要一个,因为这可能不是一个大容量容器。@ CeasBoT C++集(刚刚设置,从头)排序,见:2)我已经看到了这个建议,并正在考虑它。但我对从现有的容器中派生出来的内容很谨慎。当然,这是一种选择。@chessbot我和你一样担心,但私人继承是相当安全的(尽管不是傻瓜式的)。