如果找到一个项目在STL队列已经存在(Find if an item already exists

2019-09-17 04:23发布

我使用的是STL队列实现上图的BFS(广度优先搜索)。 我需要推动一个节点在队列中,如果该节点已在队列中不存在。 然而,STL队列也不允许通过迭代它的元素 ,因此我不能使用STL查找功能。

我可以用一个标志,对每个节点,以纪念他们被访问时,他们并把他们只有在标志是假的,不过,我需要运行BFS多次,每一次后,我将不得不重新设置所有的标志,所以我结束使用了一个计数器而不是标志,但我还是想知道如果在队列找到一个项目的标准方式。

Answer 1:

我假设你实现你的BFS“封闭集合”的概念? 这样做的标准方法是简单地维护单独std::setstd::unordered_set已经遇到过的元素。 这样,你得到O(LG N)或O(1)查找,同时通过队列进行迭代,如果得到支持,将需要O(n)的时间。



文章来源: Find if an item already exists in STL queue