[MFC]过滤数组中重复的数据

这篇具有很好参考价值的文章主要介绍了[MFC]过滤数组中重复的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前在帮客户开发一个自动读取物理网卡地址功能的时候,获取到的网卡地址偶尔会出现重复,如下图,无论是单张网卡还是多张网卡都存在这个问题。由于我获取的网卡地址是存放于CStringArray中,所以我得对其中的数据进行去重才能正常地显示网卡地址。

[MFC]过滤数组中重复的数据

 为此,我在网上找到资料,用映射表类CMap的操作符[]来进行去重,代码如下。

void ReplicateData(CStringArray* inputData,CStringArray* outputData,int &size)
{
    CMap<CString , LPCTSTR , bool, bool &>    StrMap;
    for ( int i = 0; i < size; i ++ )
    {
        StrMap[inputData->GetAt(i)] = true;//操作符[]是在映射中插入一个元素,它是代替SetAt的操作符
    }
    POSITION pos = StrMap.GetStartPosition();
    int i = 0;
    while ( pos )
    {
        bool value;
        CString key;
        StrMap.GetNextAssoc( pos, key, value );
        outputData->Add(key);
        i ++;
    }
    size = i;
}

下面先介绍一下映射表类(CMap),映射表类(CMap)是MFC集合类中的一个模板类,也称作为“字典”。 类似于c++ STL map或hashmap,构造为CMap<KEY,ARG_KEY,VALUE,ARG_VALUE>,KEY对象的类,用作映射的关键码。ARG_KEY参数KEY使用的数据类型,通常为KEY的参考。VALUE存储在映射中对象的类。ARG_VALUE参数VALUE使用的数据类型,通常为VALUE的参考。它的SetAt函数在映射中插入一个元素,如果发现相匹配的关键码,则替换已经存在的元素。而Operator[]:在映射中插入一个元素,它是代替SetAt的操作符,剩下更多关于映射表类的资料可自行去网上搜寻。

ReplicateData函数的三个参数分别代表输入有重复数据的数组、输出去重后的数组,还有数组的长度的引用。首先,定义一个CMap模板类的对象StrMap,key为CString类型,value则为bool类型。然后建立一个循环,根据输入数组的长度,去给StrMap映射中插入元素,这里简单点全部插入true,在这一步中,根据上面对CMap类的介绍(SetAt函数在映射中插入一个元素,如果发现相匹配的关键码,则替换已经存在的元素),StrMap中的key就不存在重复的数据。接下来,用GetStartPosition函数获取表头的位置,然后,我们可以使用GetNextAssoc函数来遍历,把key添加到输出数组中,遍历完整个表之后,就能获得没有重复数据的输出数组。文章来源地址https://www.toymoban.com/news/detail-746031.html

到了这里,关于[MFC]过滤数组中重复的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用java语言中的stream流操作判断一个数组中是否有重复元素

    判断数组中是否有重复元素可以说是每一个编程语言初学者都会遇到的题目,常见的各种搜索算法本文不做赘述了,我们这次介绍的是利用java语言中特有的stream流操作来判断通用类型数组是否包含重复元素。 首先我们声明一个泛型方法: 表明该方法适用于所有类型的数组。

    2024年02月12日
    浏览(47)
  • vue3【侦测|过滤|数组方法】数据变化侦测&&信息筛选过滤&&常用数组方法.filter() .map() .forEach(). find()

    内容回顾 点击快速复习v-for👏👏👏。本期内容主要是 数据变化的检测 和 信息的过滤筛选 以及 常用的数组方法 👇 ( .filter() 、 .map() 、 .forEach() 、 .find() 、 .findIndex() 、 .some() 、 .every() 、 .fill() )。 延展一下 :👏👏👏 关于数据的变化——比如,对表格数据进行的搜索,

    2024年02月10日
    浏览(35)
  • leetcode 442. 数组中重复的数据(java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-all-duplicates-in-an-array 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为

    2024年02月15日
    浏览(31)
  • MFC第十四天 BS_按钮属性与CButton类功能简介 、静态文本的穿透属性与显示密码开发、CS架构客户端的账号管理功能添加功能开发

    CButton类简介: a)CButton在VC6.0等早期版本,必须设置BS_BITMAP或BS_ICON才能设置图标(文字加图)。 b)近期VS版本即使不设置这两种属性,也直接可以设置文字加图的模式; c)近期VS版本如果设置以上两种属性,则不显示文字只显示图; 但凡你想接收全面的基础消息(控件内的基础

    2024年02月16日
    浏览(43)
  • js实现push重复的数组拿到最新的数据

    2023.8.1今天我学习了如何使用js把重复push的数组只取最新的。 如:当我们使用@input方法需要对数据进行叠加的时候可能会对同一条数据进行多次操作。 如: data:[ {id:1,name:\\\'张三\\\'},{id:2,name:\\\'李四\\\'},{id:1,name:\\\'张三三\\\'} ] 通过这个数组我们会发现id为1的这个数据会添加了两次,但是

    2024年02月14日
    浏览(35)
  • 【数据结构OJ题】删除有序数组中的重复项

    原题链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 用 双指针算法, 定义两个变量src和dst,一开始让src和dst指向num[ ]数组的第一个元素,再使用if语句判断。 如果nums[src]==nums[dst],就让src指向下一位,即src++。如果nums[src]!=

    2024年02月14日
    浏览(39)
  • uniapp 中过滤获得数组中某个对象里id:1的数据

    JavaScript中的Array.filter()方法来过滤获取数组中某个对象里id:1的数据 延伸: filter() 创建一个新的数组,新数组的元素是符合指定条件的元素,不会检测空数组,不会改变原来的数组。 map() 返回一个新的数组,新数组的元素是原数组的元素按照顺序依次处理后的值。 foreach() 循

    2024年02月14日
    浏览(34)
  • MySQL 根据多字段查询重复数据 MySQL根据某一个或者多个字段查找重复数据

    在实际的数据库应用中,我们经常需要根据多个字段来查询重复的数据。MySQL 提供了一些方法来实现这个功能,让我们能够快速准确地找到和处理重复数据。本文将介绍如何使用 MySQL 来根据多字段查询重复数据,并提供相应的代码示例。 什么是重复数据? 重复数据指的是在

    2024年02月12日
    浏览(39)
  • 【RocketMQ】RocketMQ标签、过滤及消息重复消费

    参考文档: 官方文档 Topic 与 Tag 都是业务上用来归类的标识,区别在于 Topic 是一级分类,而 Tag 可以理解为是二级分类。使用 Tag 可以实现对 Topic 中的消息进行过滤。 注: Topic:消息主题,通过 Topic 对不同的业务消息进行分类。 Tag:消息标签,用来进一步区分某个 Topic 下

    2024年02月07日
    浏览(47)
  • 一个基于Kafka客户端封装的工具,Kafka开发效率神器

    GitHub源码https://github.com/zhangchuangiie/SimpleKafka 一个基于Kafka客户端封装的工具,Kafka开发效率神器 封装了常用的Kafka客户端操作,无需维护配置,无需初始化客户端,真正实现了一行代码调用 将连接池的维护封装在工具类里面,多线程使用也无需维护客户端集合 只需要集成1个

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包