查找STL队列中是否已存在某个项目

Ari*_*Ari 5 c++ algorithm queue stl find

我正在使用STL队列在图形上实现BFS(广度优先搜索).如果队列中不存在该节点,我需要在队列中推送一个节点.但是,STL队列不允许迭代其元素,因此我不能使用STL查找功能.

我可以为每个节点使用一个标志来标记它们,只有在标志为false时才推送它们,但是,我需要多次运行BFS,每次我必须重置所有标志,所以我结束了使用计数器而不是标志,但我仍然想知道是否有一种在队列中查找项目的标准方法.

Fre*_*Foo 6

我假设你在BFS中实现了"封闭集"的概念?这样做的标准方法是简单地维护已经遇到的单独std::setstd::unordered_set元素.这样,你得到O(lg n)或O(1)查找,而在队列中迭代,如果它被支持,则需要O(n)时间.