c++ - 查找项目是否已存在于 STL 队列中

标签 c++ algorithm stl find queue

我正在使用 STL 队列在图上实现 BFS(广度优先搜索)。如果队列中不存在该节点,我需要将其推送到队列中。但是,STL 队列确实 not allow iteration through its elements因此我不能使用 STL 查找功能。

我可以为每个节点使用一个标志,在它们被访问时标记它们,并仅在标志为 false 时才推送它们,但是,我需要多次运行 BFS,每次之后我都必须重置所有标志,所以我最终使用了计数器而不是标志,但我仍然想知道是否有一种标准方法可以在队列中查找项目。

最佳答案

我假设您正在 BFS 中实现“闭集”的概念?这样做的标准方法是简单地维护一个单独的 std::setstd::unordered_set 已经遇到的元素。这样,您将获得 O(lg n) 或 O(1) 查找,同时遍历队列(如果支持)将花费 O(n) 时间。

关于c++ - 查找项目是否已存在于 STL 队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550962/

相关文章:

c++ - SDL_GetRelativeMouseState 奇怪的行为

algorithm - 快速求和递归的递归没有得到正确的结果

algorithm - a1 x1 + a2 x2 +…+ an x​​n = k(k <= 10 ^ 18)的正解数

algorithm - 如何在 O(|E|) 中从图中删除一条边后更正 MST?

c++ - 我可以将 STL 数据结构传递给 Win32 消息循环吗?

c++ - c++ vector 构造函数的奇怪行为

c++ - 在 C++ 中分配给变量时出错

c++ - STL set_intersection 运行时错误

c++ - 我需要一个类似于堆栈但具有随机访问功能的数据结构,但是我应该实现什么?

c++ - 如果有专门的函数和模板函数,为什么没有必要专门针对 `std::nullptr_t`