原文链接:https://blog.csdn.net/qq_40969467/article/details/90758281

https://blog.csdn.net/qq_23350817/article/details/100097881

点击查看更多通信与专业知识

一、实现从vector中过滤重复的数据

0、前言

相信有很有种情况下面要在vector下过滤掉重复的数据就比如在数组中需要过滤重复数据一样重要一般常用的方法,好像还是在学校中教的,进行匹配一遍,然后再进行插入既然有了STL容器,那么我们可以完全抛弃上面提到的一般方法,把效率提高至少1倍。

1、思路

map也是我们常用的一种容器,他主要的保存方式是,也就是通过key来进行索引,而且这个key是不重复的,那么在我们过滤的前提下,map就是成败的关键了,看看如何把它用好

2、容易陷入的错误

a、一想到容器,很容易想到使用迭代器(iterator),但是对于map,加入数据量大的时候,进行iterator的操作很慢很慢!
b、容易想到,先把数据都插入到map中,再最后直接在写入vector中,其实这样又回到了a中

3、流程分析

假设我们要存放N多的数据(假设是海量的),那么我们需要避免对map进行iterator的操作(很慢很慢!)
于是在数据插入的时候,我先去从map中find一下,加入map中并不存在这个key,那么我们放心的插入到map中,同时插入到vector中。总之,每一次想到要插入vector我都想到map.find、map.insert,那么最终的vector就是不存在重复的,也同时避免了在map中使用迭代器(iterator)。

4.分析

map查找某个元素方便,但遍历是弱项,所以用来充当过滤器; vec查找某个元素不方便,但遍历很快,用来储存很适合;

二、计算stl中重复元素个数的函数

可以使用count计算元素中重复元素个数

#include <iostream>
#include <bitset>
#include <vector>using namespace std;int main(int argc, char* argv)
{bitset<8> bt;bool ret = bt.any();if (ret) {cout << "True" << endl;}else {cout << "False" << endl;}vector<int> vec{ 1, 2, 3, 1, 2, 2, 2, 3, 3, 3, 3 };cout << count(vec.begin(), vec.end(), 3) << endl;while (1);return 0;
}

count在某些场合可以替换find使用。但是如果需要找到查找数据的位置时则必须使用find函数,count更强调查找元素出现的个数。
当如果需要清除容器中重复元素的时候,使用unique。很多场合就是先count计算是否有重复元素,如果有就先unique删除重复元素,然后使用sort对元素进行排序。

从STL中查找、统计和过滤重复(相同)的数据相关推荐

  1. 在Linux中查找和删除重复文件的4种方法

    大神教你在Linux中查找和删除重复文件的4种方法 在本教程中,您将学习如何使用rdfind和fdupes命令行工具以及称为DupeGuru和FSlint的GUI工具在Linux中查找和删除重复文件. ...

  2. Linux查找文本中的重复项,2在Linux中查找和删除重复文件的有用工具

    如果您有从互联网下载各种内容的习惯,组织您的主目录甚至系统可能会特别困难. 通常,您可能会发现已下载相同的mp3,pdf,epub(以及所有其他文件扩展名)并将其复制到不同的目录中. 这可能会导致您的 ...

  3. 在 Linux 中查找和删除重复文件

    原文链接:https://www.linuxprobe.com/linux-FSlint.html FSlint同时具有GUI和CLI模式.因此,对于新手来说,这是一个用户友好的工具.FSlint不仅 ...

  4. access重复数据累计_在 Access 中查找并删除重复记录

    如果您的 Access 数据库包含从多个源导入的数据,或者您继承了已经使用多年而且没有得到正确设置的数据库,那么该数据库中可能包含需要清除的重复记录. 要确定 Access 表中是否存在重复记录,可以 ...

  5. 在一个数组中查找两个重复出现的数字

    题目如下:现有一个数组长度为n+1,里面存放有1到n-2,顺序不定,其中有两个数字出现了两次,现在要找出那两个数字. 例子A={2, 3, 1, 4, 5, 2, 4}, 这个数组长度为7,存放了1到 ...

  6. Mysql中查找并删除重复数据的方法

    (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字段来判断 代码如下 复制代码 select * from questions where question_title ...

  7. python查找列表重复项_python – 在列表中查找项目和重复项

    我正在使用 Python并考虑以下问题:给出一个列表,例如[1,0,-2,0,0,4,5,0,3]多次包含0的整数,我希望有这些0和每一个的索引是它出现在列表中的次数,直到出现不同的元素或列表结束. ...

  8. Excel表中查找、去除重复项方法合集

    第一种,主选项卡开始->条件格式->突出显示单元格规则->重复值. 第二种,主选项卡下,高级筛选,也可以去除重复项,但是这个时候的重复项就是完全重复的才会去除. 第三种,可以在需要做 ...

  9. stl clocklist 查找元素_C++算法竞赛中常用的STL

    什么是STL? STL,Standard Template Library的缩写,标准模版库的意思.STL是一些"容器"的集合,这些容器包括list. vector.set.que ...

最新文章

  1. Selector-背景选择器
  2. linux云服务终端提示符显示-bash-4.2#解决方法
  3. wince怎么刷carplay_Carplay支持仪表/HUD显示 宝马为全球超750000辆车发布OTA升级
  4. asp.net webapi bug : System.OperationCanceledException 异常处理
  5. http status 状态码汇总
  6. 5.go 代码包 package
  7. 用Java操作Office 2007
  8. 线性代数 动手学深度学习 pytorch
  9. 嵌入式学习(一)嵌入式c语言
  10. BOS v2.0后台管理系统界面通用解决方案
  11. 目标检测数据集格式转换(yolo→voc)
  12. 怎样做产品能甩同行一个时代?李彦宏说AI思维助你降维攻击
  13. 中小型园区网络的设计与实现 (三)
  14. ASP.NET Core MVC 之局部视图(Partial Views)
  15. 请问网页的在线聊天怎么实现
  16. PAT_1022_D进制的A+B
  17. python while循环跳出_python如何跳出while循环
  18. 每天半小时,一周带你手速大幅提升——几大打字练习网站测评
  19. Java枚举类型介绍
  20. 使用python生成oracle数据报表

热门文章

  1. a partial surjection的题库
  2. Java的新项目学成在线笔记-day10(一)
  3. Python爬虫-HTMLSession的使用
  4. log file sync
  5. 确保字符串的每个单词首字母都大写,其余部分小写
  6. XSS中JavaScript加密以及Filter bypass
  7. Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
  8. nyoj 947 Max Xor(字典树)
  9. poj 3308(最小割求解最小点权覆盖)
  10. hdu 1573(中国剩余定理非互质情况)