当前位置: 首页 > 知识库问答 >
问题:

从邻接表C中删除元素

宋航
2023-03-14

这是我定义邻接列表的方式:向量

我想遍历整个邻接列表,找出是否存在某个值。如果邻接列表中存在该值,我想将其删除。我尝试了2种方法:

方法1:

for(auto elem: adj){
        for(auto ind: elem){
            if(elem[ind]==num){
                elem.erase(elem.begin()+ind);
            }
        }
    }

方法2:

auto it=elem.find(num);
if (it!=elem.end())
    elem.erase(it);

第二种方法给了我一个错误

在 “std::vector” 中没有名为 “查找” 的成员

有人能告诉我为什么我尝试的方法不起作用吗?我能做些什么来解决这个问题?谢谢。


共有1个答案

陈修诚
2023-03-14
匿名用户

autoit=elem.find(num);不起作用,因为std::向量没有名为find的成员函数。

要查找矢量中的项目,可以改用std::find

auto it=std::find(elem.begin(), elem.end(), num);
if (it!=elem.end())
    elem.erase(it);

两点:如果邻接表中的元素没有任何特定的顺序,你可以通过交换元素到向量的末尾,然后从那里删除它来加速这个操作。

另一方面,如果元素以某种已知的顺序排列,您可以使用< code>std::lower_bound更快地找到元素(对数时间而不是线性时间)。

另一种可能是使用std::setstd:;unordered_set来代替 。如果您处理的图形非常大且稠密(因此每个节点都有许多相邻节点),这可能有意义,例如,您可以在对数时间而不是线性时间从 std::set中找到并删除元素。问题是,为了实现这一点,它通常被实现为平衡树,每个节点都是从空闲存储区单独分配的。因此,尽管它的计算复杂度较低(非常低),但每次操作的时间常数通常要高得多。

 类似资料:
  • 问题内容: Google Python类| 清单练习- 给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。 我使用新列表的解决方案是- 问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找

  • 问题内容: 我有一个Delphi应用程序,其中显示了像这样的查询已玩过的游戏的列表: 当我单击DBNavigator中的删除按钮时,也会删除game_types表中的联接记录。这是一个问题,因为许多其他游戏可以是同一类型。 我需要做些什么才能删除游戏,而不删除游戏类型? 问题答案: 您需要使用“唯一表”动态属性 从MSDN ADO文档 如果设置了“唯一表”动态属性,并且Recordset是对多个表

  • 问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题

  • 问题内容: 对此问题的任何帮助将不胜感激。 我有一个元组列表 并且我需要删除某种类型的重复项:根据我的定义,(1,2)和(2,1)被视为重复项。所需输出 提前致谢 问题答案: 您可以对它们进行排序,然后使用删除重复项:

  • 问题内容: 我想将1到n层次结构作为邻接表存储到列出每个元素祖先的表中。我正在使用Postgres数据库(Postgres 10,但是要在其上部署代码的计算机运行Postgres 9.x)。 示例输入表(邻接表): 结果,我想要一个看起来像这样的表(仅显示了几行;此外,我要解决的现实问题有七个层次级别,而不是两个): 是元素的ID,是该元素在层次结构中所处的级别(0是根级别),是元素在各个级别上的

  • 给定一个元素列表,我想获取具有给定属性的元素并将其从列表中删除。我找到的最佳解决方案是: 是否可以在lambda表达式中组合get和删除?