我正在使用 STL 队列在图上实现 BFS(广度优先搜索)。如果队列中不存在该节点,我需要将其推送到队列中。但是,STL 队列确实 not allow iteration through its elements因此我不能使用 STL 查找功能。
我可以为每个节点使用一个标志,在它们被访问时标记它们,并仅在标志为 false 时才推送它们,但是,我需要多次运行 BFS,每次之后我都必须重置所有标志,所以我最终使用了计数器而不是标志,但我仍然想知道是否有一种标准方法可以在队列中查找项目。
最佳答案
我假设您正在 BFS 中实现“闭集”的概念?这样做的标准方法是简单地维护一个单独的 std::set
或 std::unordered_set
已经遇到的元素。这样,您将获得 O(lg n) 或 O(1) 查找,同时遍历队列(如果支持)将花费 O(n) 时间。
关于c++ - 查找项目是否已存在于 STL 队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550962/