删除向量向量内的重复向量

2024-01-10

我有一个向量的向量(loops) 其中包含整数值。一些内部向量是重复的,但它们的元素顺序不同。现在,我想获得一个向量的向量,而没有任何重复的内部向量。 这是我的 vec 的一个例子;

循环 = ((9 18 26 11 9), (9 11 26 18 9),(9 18 25 16 9),(11 45 26 11),( 11 26 45 11),( 16 49 25 16),( 16 25 49 16),(18 9 11 26 18),( 18 9 16 25 18),( 25 16 49 25),( 26 11 45 26))

识别任何内部向量是否是另一个内部向量的重复;我开发了一个功能IsDuplicate。这告诉我,(9 18 26 11 9) and (9 11 26 18 9)是重复项,那么我可以删除第二个或所有其他重复项。

为了删除向量向量中的重复向量,我实现了以下代码。

Vector<vector<int> > loops;
Vector<vector<int> > ::iterator no1, no2;
Int setno1, setno2;

for (no1=loops.begin(), setno1=0; no1!=loops.end(); no1++, setno1++){
       set1 = *no1;
       for (no2=loops.begin()+setno1, setno2=setno1; no2!=loops.end(); setno2++){
            set2 = *no2;
            if (set2.IsDuplicate(set1))  loops.erase(loops.begin()+setno2);
            else no2++;
       }

  }

这花了很长时间,我以为我的程序崩溃了。所以,请帮助我纠正这个问题。

另外,我尝试过这个。这有效,但我得到了错误的答案。请提供任何帮助。

01   int first=0; bool duplicates=false;  
02   do {     
03        set1 = loops[first];     
04        for (no2=loops.begin()+1, setno2=1;  no2!=loops.end();  setno2++){     
05             set2 = *no2;      
06             if (set2.IsPartOf(set1)){      
07                 loops.erase(loops.begin()+setno2);     
08                 duplicates = true;      
09             }      
10             else no2++;     
11        }      
12        first++;      
13       } while(!duplicates); 

惯用的方法是使用删除/删除习语 http://en.wikipedia.org/wiki/Erase-remove_idiom使用自定义谓词。 要检查重复向量而不修改向量的内容,请编写一个按值获取其参数的谓词,对向量进行排序并使用std::equal.

bool equal_vector(std::vector<int> a, std::vector<int> b) {
  std::sort(a.begin(), a.end());
  std::sort(b.begin(), b.end());

  return std::equal(a.begin(), a.end(), b.begin());
}

// use it like this
v.erase( remove_if(v.begin(), v.end(), equal_vector), v.end() );

至于为什么您当前的代码失败:Erasing an element from avector使当前存在的该向量的所有其他迭代器无效vector::erase返回一个有效的迭代器,指向已删除元素之后的位置。

stdlib 还提供了set and multiset看起来更适合您的目的的容器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除向量向量内的重复向量 的相关文章

随机推荐

  • Mysql 慢查询日志正在记录更快的查询

    我在数据库服务器上设置了mysql慢查询日志 并将长查询时间设置为5 刚刚检查了日志及其日志查询 只需几毫秒 有人知道为什么会这样吗 这是一些日志 最后一个查询并不是最优化的 它说它检查了 450000 行 所以我在日志中看到它不会感到惊讶
  • 为 Jboss 启用 gzip 压缩

    Jboss 5 1 0 的 gzip 压缩是如何启用的 在 tomcat http 连接器内对吗 我不记得这个文件存储在哪里 server xml 编辑 jboss server default deploy jbossweb sar se
  • Go Flush() 不起作用

    请检查一下这个要点并告诉我 出了什么问题 为什么我看不到我的消息 要旨 https gist github com cnaize 895f61b762a9f5ee074c https gist github com cnaize 895f6
  • 如何在 Android 中使用 Intent 拨打电话?

    我正在使用以下代码在 Android 中拨打电话 但它给了我安全异常 请帮助 posted by 111 333 222 4 String uri tel posted by trim Intent intent new Intent In
  • 如何在 SQL 中找到连续的活跃周?

    我想做的是找到某人在周日活跃的连续周数并为其分配一个值 他们每天必须参加至少 2 场比赛才能算作本周的活跃比赛 如果它们连续 2 周活跃 我想指定值为 100 连续 3 周指定为 200 连续 4 周指定为 300 并持续最多连续 9 周
  • JUunit 测试用例中内部图形尚未初始化

    我正在使用 JavaFx 制作一个轻量级绘画应用程序 我的一些问题LayerController类及其方法addLayer所以我认为编写一些 JUnit 测试用例来检查我的方法的正确性是一个好主意 简而言之 我正在画一个Canvas使用它的
  • 如何创建具有格式的字符串?

    我需要创建一个String具有可以转换的格式Int Int64 Double等输入String 使用 Objective C 我可以通过以下方式做到这一点 NSString str NSString stringWithFormat d f
  • MySQL 类似断言的约束

    我是MySQL新手 我刚刚发现它不支持断言 我得到了这张表 CREATE TABLE guest ssn varchar 16 NOT NULL name varchar 200 NOT NULL surname varchar 200 N
  • UIImage 上的圆角

    我正在尝试使用圆角在 iPhone 上绘制图像 就像联系人应用程序中的联系人图像一样 我的代码通常可以工作 但它偶尔会在 UIImage 绘图例程中崩溃EXEC BAD ACCESS KERN INVALID ADDRESS 我认为这可能与
  • 为什么新的 AKSequencer 不发出任何声音?

    我有一个相当复杂的应用程序 到目前为止一直在使用 AKAppleSequencer 但由于该定序器时不时出现一些奇怪的行为和错误 我一直希望迁移到较新的 AKSequencer 不幸的是 新的音序器似乎没有在 Playgrounds 或太多
  • On Key Down 限制用户输入一些特殊字符

    我想限制用户在工具栏搜索中不允许他 她使用一些特殊字符 例如 gt tblFundComp bind keydown function e if e keyCode gt 48 e keyCode lt 57 return false el
  • Spring Security 配置 anyRequest().authenticated() 未按预期工作

    我对spring security配置的理解http anyRequest authenticated 是任何请求都必须经过身份验证 否则我的 Spring 应用程序将返回 401 响应 不幸的是 我的 spring 应用程序不会以这种方式
  • 如何解析命令行参数?

    我想解析 perl 脚本中的参数列表 例如我有这种情况 script pl h 127 0 0 1 u user p pass arg1 arg2 arg3 我该如何解析数组中不是选项的参数列表以及标量值中的选项参数 Thanks 好吧 如
  • 升级 3.0.3 -> 3.2.2 后,NServiceBus 端点寻找 RavenDB 超时

    使用 NuGet 我将项目中的所有 NServiceBus 引用从 3 0 3 升级到 3 2 2 对于此解决方案中的 4 个服务 我还为它们提供了对 NuGet 中的 NServiceBus Host 的引用 我将二进制文件部署到测试环境
  • formik中的submit Form、handleSubmit、onSubmit有什么区别?

    福米克医生说 https jaredpalmer com formik docs guides form submission https jaredpalmer com formik docs guides form submission
  • 从 Roslyn 方法调用中的相应参数获取方法参数的名称

    我想知道是否有一些现有的逻辑可以通过查看该特定方法 构造函数的调用来获取有关其包含的方法 构造函数签名中的参数定义的名称 或任何其他相关信息 基本上 我只是希望能够获得一个变量的默认名称 该名称将作为参数传递给调用 因此 如果一个方法定义如
  • Flexbox 使用align-items: flex-start 和align-content: center

    再会 我正在尝试使用 Flex 框在横轴上包含多余空间的 Flex 容器中强制执行以下行为 如果所有弹性项目都适合一行 那么它们应该在横轴的顶部对齐 但 一旦它们包裹起来 柔性项目应该凝结在横轴的中心 为此 我尝试了以下标记https js
  • 如何构建知识图谱?

    我用 PageRank 制作了一个可以在我的计算机上运行的小型搜索引擎的原型 我有兴趣在其之上构建一个知识图 它应该只返回在正确上下文中的查询网页 类似于谷歌如何找到搜索问题的相关答案 我看到了很多关于知识图的宣传 但没有很多文献 而且几乎
  • WPF 拖放和数据类型

    如何获取掉落物体的类型 如何将其添加到特定的结构 列表中 假设您控制拖动的开始 您不是从另一个应用程序拖动 则类型取决于您 只需使源代码和目标代码匹配即可 在拖动中 通常是 MouseMove 或 MouseDown 处理程序 var dr
  • 删除向量向量内的重复向量

    我有一个向量的向量 loops 其中包含整数值 一些内部向量是重复的 但它们的元素顺序不同 现在 我想获得一个向量的向量 而没有任何重复的内部向量 这是我的 vec 的一个例子 循环 9 18 26 11 9 9 11 26 18 9 9