首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在multimap c++中删除重复读取值?

在multimap中删除重复读取值的方法是使用迭代器遍历multimap,并使用erase函数删除重复的值。

具体步骤如下:

  1. 创建一个multimap对象,并插入一些键值对。
  2. 创建一个临时的multimap对象,用于存储不重复的键值对。
  3. 使用迭代器遍历原始的multimap对象。
  4. 在遍历过程中,判断当前键值对是否已经存在于临时multimap中。
  5. 如果不存在,则将当前键值对插入临时multimap中。
  6. 遍历完成后,将临时multimap对象赋值给原始的multimap对象,完成删除重复读取值的操作。

以下是示例代码:

代码语言:txt
复制
#include <iostream>
#include <map>

int main() {
    std::multimap<int, std::string> myMultimap;
    myMultimap.insert(std::make_pair(1, "apple"));
    myMultimap.insert(std::make_pair(2, "banana"));
    myMultimap.insert(std::make_pair(3, "apple"));
    myMultimap.insert(std::make_pair(4, "orange"));
    myMultimap.insert(std::make_pair(5, "banana"));

    std::multimap<int, std::string> uniqueMultimap;
    for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it) {
        if (uniqueMultimap.find(it->first) == uniqueMultimap.end()) {
            uniqueMultimap.insert(*it);
        }
    }

    myMultimap = uniqueMultimap;

    // 输出删除重复读取值后的multimap
    for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    return 0;
}

这段代码中,我们创建了一个multimap对象myMultimap,并插入了一些键值对。然后,我们创建了一个临时的multimap对象uniqueMultimap,用于存储不重复的键值对。接下来,我们使用迭代器遍历myMultimap,并在遍历过程中判断当前键值对是否已经存在于uniqueMultimap中。如果不存在,则将当前键值对插入uniqueMultimap中。最后,我们将uniqueMultimap赋值给myMultimap,完成删除重复读取值的操作。

输出结果为:

代码语言:txt
复制
1: apple
2: banana
4: orange

在这个例子中,重复的键值对3: apple5: banana被成功删除了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

删除有序数组重复C++

题目描述 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。...更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。...不需要考虑数组超出新长度后面的元素。...temp.insert(it); nums.clear(); for(auto & it:temp)nums.push_back(it); return nums.size(); } }; 思路分析 删除重复项...我直接用set把所给数组的元素存一遍,这样就没有重复项了,再把原数组清空,再遍历set集合把元素一一copy到原数组,最后返回数组大小,完事zZZ。

25230
  • C++进阶学习】第六弹——set和map——体会用C++来构建二叉搜索树

    set和map基础:【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫-CSDN博客 前言: 在上篇的学习,我们已经学习了如何使用C语言来实现二叉搜索树,在C++,我们是有现成的封装好的类模板来实现二叉搜索树的...set内部通常采用红黑树实现,保证了元素的对数时间复杂度的插入、删除和查找操作。 multiset 与set类似,但它允许存储重复的元素。...如果允许集合存在重复元素,那么应该选择multiset。 三、map和multimapC++的STL(标准模板库),map和multimap是两种关联容器,它们用于存储键值对。...multimap则适用于需要处理多个值与相同键关联的场景,记录用户在不同时间段的登录记录。 3....性能:插入、查找和删除操作的时间复杂度为O(log n),基于红黑树的高效性。 值类型:值的类型可以是任何类型,但通常选择有意义的数据类型,整型、浮点型或字符串等。 5.

    11710

    C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧

    这类容器与序列式容器(vector、deque、list)的主要区别在于,关联式容器的元素是按照特定的排序准则(通常是键的大小)进行排序的,从而允许通过键来快速查找、插入和删除元素 关联式容器:...set的底层使用二叉搜索树(红黑树)来实现 multiset的概念 概念:multiset 是 C++ 标准库 的一个容器,它允许存储重复的元素。...的概念 概念: multimapC++ 标准库 的一个关联容器,它允许存储具有相同键的多个值。...与 map 不同,map 的键是唯一的,而 multimap 的键可以重复 multimap的接口可以参考map,功能都是类似的。...注意: multimap的key是可以重复multimap的元素默认将key按照小于来比较 multimap没有重载operator[]操作 map的使用 map的模板参数说明 key:

    33510

    从零开始学C++之STL(一):STL六大组件简介

    一、STL简介 (一)、泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础...(set、multiset、map、multimap) 1、需要频繁在序列中间位置上进行插入和/或删除操作且不需要过多地在序列内部进行长距离跳转,应该选择list 2、vector头部与中间插入删除效率较低...至于multiset/multimap,他们的特性及用法和set/map完全相同,唯一的差别就在于它们允许键值重复,即所有的插入操作基于RB-tree的insert_equal()而非insert_unique...hashtable(而multiset/multimap,上面说了,底层实现机制是RB-tree),所以它们的元素都不会被自动排序,不过也都允许键值重复。.../hash_multimap都是基于hashtable之上,所以不含有自动排序功能,至于加个前缀multi_无非就是允许键值重复而已。

    1.8K00

    C++STL容器知识点小结

    STL 最早源于惠普实验室,早于C++存在,但是C++引入STL概念后,STL就成为C++的一部分,因为它被内建在你的编译器之内,不需要另行安装。...经典的数据结构数量有限,但是在项目实战,我们常常重复着一些为了存放不同数据类型而实现顺序表、链表等结构而重复编写的代码,这些代码都十分相似,只是为了适应不同数据类型的变化而在细节上有所出入。...;而multimap相同键可以出现多次。...;若不存在,返回map.end(); //因为multimap可以存在重复的键值,所以用循环迭代器查找的时候,可以输入具有相同键值的元素。...(multimap重复元素 ) 最后一个的代码示例 multimap mul1; mul1.insert(pair(1, "甲")); mul1.insert

    68310

    C++】STL 标准模板库 ① ( STL 简介 | STL 基本概念 | STL 主要内容 )

    一、STL 简介 1、STL 概念 C++ 语言 的 STL " 标准模板库 " 英文全称 " Standard Template Library " , STL 是一套强大的 C++ 库 , 其中包含了各种通用的...数据结构和算法 , : 向量、列表、队列、排序等 ; STL 是 C++ 标准的一部分 , 所有的 C++ 编译器 都应该支持该标准 ; 2、STL 主要内容 STL 的主要内容 : 容器 : 存储数据的类...; 向量 vector , 双端队列 deque , 表 list , 队列 queue , 堆栈 stack , 集合 set , 多重集合 multiset , 映射 map 和 多重映射 multimap..., 不同之处是 双端队列可以 在序列头部 插入和删除 操作 , 具有常量时间复杂度 ; 表 list : 对任意元素的访问与对两端的距离成正比,但对某个位置上插入和删除一个项的花费为常数时间 集合 set...: 元素不能重复的集合 ; 多重集合 multiset : 元素可以重复的集合 ; 映射 map : 存放键值对 , 一个键对应一个值 ; 多重映射 multimap : 存放键值对 , 一个键对应多个值

    43230

    深入理解STL库_STL文件格式的工作原理

    微信公众号搜索:阿Q正砖 上期说过C++这块面试问的东西也蛮多,简历上只要出现C++这几个字,那么STL库就是必问。 总不能是面试官问你了解STL库吗?你尴尬的说这块不怎么熟悉。...前向迭代器:兼具输入和输出迭代器的能力,但是它可以对同一个位置重复进行和写。前向迭代器不支持operator–,所以它只能向前移动。所有的标准STL容器都支持比前向迭代器功能更强大的迭代器。...Multimap类似于数据库1:N关系,是一种关联容器,提供一对多的数据处理能力。 Set类似于数学里的集合,但是set的集合不包含重复的元素。...如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。 Multiset类似于数学里的集合,multiset的集合包含重复的元素。...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    59910

    c++ map和set_STLset和map的区别

    C++map和set的介绍及使用 零、前言 一、关联式容器 二、键值对 三、C++的set 1、set的介绍 2、set的使用 四、C++的multiset 五、C++的map 1、map的介绍...2、map的使用 六、C++multimap 零、前言 本章主要讲解C++的一个关联式容器map和set的介绍及其使用 一、关联式容器 容器分类: 序列式容器:初阶阶段中学习过STL的部分容器...for (auto& e : map)//遍历 cout << e.first << ":" << e.second << endl; } 结果: 六、C++multimap multimap的介绍...: multimap容器与map容器的底层实现以及成员函数的接口都是基本一致,区别是multimap允许键值冗余,即multimap容器当中存储的元素是可以重复的 注意: 对于find来说multimap...发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    41120

    C++map和set的介绍及使用

    C++map和set的介绍及使用 零、前言 一、关联式容器 二、键值对 三、C++的set 1、set的介绍 2、set的使用 四、C++的multiset 五、C++的map 1、map的介绍...2、map的使用 六、C++multimap 零、前言 本章主要讲解C++的一个关联式容器map和set的介绍及其使用 一、关联式容器 容器分类: 序列式容器:初阶阶段中学习过STL的部分容器...( iterator position ) 删除setposition位置上的元素 size_type erase ( const key_type& x ) 删除set中值为x的元素,返回删除的元素的个数...for (auto& e : map)//遍历 cout << e.first << ":" << e.second << endl; } 结果: 六、C++multimap multimap...的介绍: multimap容器与map容器的底层实现以及成员函数的接口都是基本一致,区别是multimap允许键值冗余,即multimap容器当中存储的元素是可以重复的 注意: 对于find

    38530

    C++基础 STL简介

    因此,如果要修改 multiset 容器某个元素的值,**正确的做法是先删除该元素,再插入新元素**。 set set 和 multiset 类似,差别在于**set不能有重复的元素** 。...由于不能有重复元素,所以set插入单个元素的insert成员函数与multiset的有所不同 multimap multimap 的每个元素都分为关键字和值两部分,容器的元素是按关键字排序的,并且允许有多个元素的关键字相同...不能直接修改 multimap 容器的关键字。...multimap 的元素都是pair 模板类的对象。元素的 first 成员变量也叫“关键字”,second 成员变量也叫“值”。multimap 容器的元素是按关键字从小到大排序的。...map map 和 multimap 十分类似,区别在于 map 容器中元素的关键字不能重复multimap 有的成员函数,map 都有。

    67820

    提升编程效率的利器: 解析Google Guava库之集合篇Multimap(二)

    除了支持多值映射外,Multimap 还具有以下特点: 值集合不必唯一: 与 SetMultimap 不同,普通的 Multimap 允许值重复。...顺序可保留也可不保留: Guava 提供了多种 Multimap 的实现,其中一些实现可以保留元素插入的顺序, LinkedHashMultimap,而另一些实现则不保证顺序, HashMultimap...,因此上述代码的输出可能会根据键的插入和删除顺序而有所不同。...在实际应用,你可以根据具体需求选择使用Multimap的哪种实现(ArrayListMultimap、HashMultimap、LinkedListMultimap等),并调整上述示例以满足你的场景...我们展示了如何在多线程环境安全地使用这个 Multimap,包括在迭代时需要在 synchronized 块中进行以避免并发修改异常。

    33310

    6.1 C++ STL 序列映射容器

    Map/Multimap 映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值...6.1 通过对组实现键值对 这段代码演示了C++中标准库pair和set的用法。pair是一个用来存储一对值的数据类型,可以用来表示关联数组或者键值对。...set是一个用来存储不重复元素的集合,其内部自动对元素进行排序,具体排序方式由元素类型的比较函数定义。 代码首先创建了两个pair对象p和p2,分别用string和int类型的值进行初始化。...由于set不能存在重复的元素,所以在插入元素10时,因为之前已经插入过10,所以插入失败,返回了一个pair对象,其中second为false,表示插入失败。...+ STL的map容器,其中包括了map的插入、删除、正向遍历、反向遍历等常用操作。

    19050

    C++】map 和 set

    ,第二个元素代表是否插入成功 (插入重复节点会返回 false): erase 也有三种,常用的是第一种和第二种,删除指定键值的数据和删除指定迭代器位置的数据: 操作 set 还有一些其他操作相关的函数...没有重复的节点,所以 find 时要么返回该节点位置的迭代器,要么返回 end();而 multiset 可能有重复的节点,所以 find 时返回的是同一 key 值的哪一个节点呢?...,第二个元素代表是否插入成功 (插入重复节点会返回 false):: erase 一样也有三种,常用的是第一种和第二种,删除指定键值的数据和删除指定迭代器位置的数据: 元素访问 需要重点注意的是,map...,multimap 并没有重载 [] 运算符,因为 multimap 的元素是可以重复的,如果使用 [] 运算符,会导致多个元素的 key 值相同,无法确定具体访问哪一个元素。...如果大家对 multimap的使用还有不清楚的地方,建议查阅 multimap文档:multimap - C++ Reference (cplusplus.com) ----

    58700

    C++深度探索】map与set的基础介绍与实用指南

    1.set介绍与使用 set文档介绍   C++标准库的set是一个容器类,它可以存储一组不重复的元素,并按照一定的排序规则进行排序。...2.multiset介绍与使用 2.1 multiset的介绍 multiset文档介绍   multiset是C++的一个容器,它是一个有序的集合,允许重复的元素存在。...注意:multimap和map的唯一不同就是:map的key是唯一的,而multimapkey是可以重复的。...4.3 multimap的特点 允许一个键对应多个值,因此可以有重复的键。...5.结语 map、set、multimap、multiset的区别在于set存储不重复的元素,map存储不重复的键值对,而multiset可以存储重复的元素,multimap可以存储重复的键值对。

    11510

    6.1 C++ STL 序列映射容器

    Map/Multimap 映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值...6.1 通过对组实现键值对这段代码演示了C++中标准库pair和set的用法。pair是一个用来存储一对值的数据类型,可以用来表示关联数组或者键值对。...set是一个用来存储不重复元素的集合,其内部自动对元素进行排序,具体排序方式由元素类型的比较函数定义。代码首先创建了两个pair对象p和p2,分别用string和int类型的值进行初始化。...由于set不能存在重复的元素,所以在插入元素10时,因为之前已经插入过10,所以插入失败,返回了一个pair对象,其中second为false,表示插入失败。最后程序暂停等待用户操作,防止程序退出。...+ STL的map容器,其中包括了map的插入、删除、正向遍历、反向遍历等常用操作。

    17520

    STL里的容器区别

    map map类似于数据库的1:1关系,它是一种关联容器,提供一对一(C++ primer中文版中将第一个译为键,每个键只能在map中出现一次,第二个被译为该键对应的值)的数据处理能力,这种特性了使得...multimap multimap类似于数据库的1:N关系,它是一种关联容器,提供一对多的数据处理能力。...set set类似于数学里面的集合,不过set的集合不包含重复的元素,这是和vector的第一个区别,第二个区别是set内部用平衡二叉树实现,便于元素查找,而vector是使用连续内存存储,便于随机存取...multiset multiset类似于数学里面的集合,集合可以包含重复的元素。...---- 小结 在实际使用过程,到底选择这几种容器的哪一个,应该根据遵循以下原则: 1、如果需要高效的随机存取,不在乎插入和删除的效率,使用vector; 2、如果需要大量的插入和删除元素

    1K40
    领券