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

从std :: multimap <>删除项目后,是否可以继续使用迭代器?

std::multimap中删除项目后,已经删除的项目的迭代器将失效,不能再继续使用。但是,其他未删除的项目的迭代器仍然可以继续使用。在删除项目后,如果需要继续使用迭代器,请确保迭代器指向的项目没有被删除。

如果需要删除多个项目,可以使用std::multimap::erase()函数删除指定的项目,并返回指向下一个未删除项目的迭代器。

例如:

代码语言:cpp
复制
std::multimap<int, std::string> my_multimap;
// 添加一些项目到my_multimap中

// 删除第一个值为"apple"的项目
auto it = my_multimap.find(1);
if (it != my_multimap.end()) {
    my_multimap.erase(it);
}

// 删除所有值为"banana"的项目
auto range = my_multimap.equal_range(2);
for (auto it = range.first; it != range.second; ++it) {
    my_multimap.erase(it);
}

在删除项目后,如果需要继续使用迭代器,请确保迭代器指向的项目没有被删除。

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

相关·内容

【C++】STL 容器 - multimap 容器 ( multimap 容器简介 | multimap 容器常用操作 api - 插入 删除 修改 元素 )

可以删除指定 键值 / 指定迭代位置 / 指定迭代范围 的 元素 ; 删除指定 键值 元素 : 通过键删除单个元素 , 返回被删除元素的数量 , 对于 multimap,可能 删除多个具有相同键的元素中的一个...; size_type erase(const key_type& key); 删除 指定迭代位置 元素 : 通过迭代删除单个元素,返回指向下一个元素的迭代 ; iterator erase(...const_iterator position); 删除 指定迭代范围 元素 : 删除一个范围内的元素,返回指向下一个元素的迭代 ; iterator erase(const_iterator first...find 函数 或者 equal_range 函数 , 获取对应的迭代 , std::multimap#find 函数 获取的是 键 的第一个 迭代 ; // 修改 4 对应的值 Green 为...= myMap.end()) { // 修改找到的元素的值 it->second = "Purple"; } std::multimap#equal_range 函数 获取的是 键 的 迭代

18610

【c++】set和map的使用

使用set的迭代遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改 set中的底层使用二叉搜索树(红黑树...这两个函数同样适用于 multiset 和 map,multimap 等关联容器,其行为是类似的。 它们的返回类型是对应容器的迭代(或const迭代,取决于容器实例是否是const)。...因为std::map的insert方法重载接收一个std::pair类型的对象,编译可以通过构造函数隐式类型转换,提供的两个值创建一个pair对象...因此,当尝试打印迭代指向的元素时,需要专门引用键(first 成员)和值(second 成员),而不能直接打印迭代 key不能修改,value可以修改 const迭代都不能修改 这里的迭代和链表的迭代很像...这会使频率最高的单词排在前面,并且在频率相同的情况下字典序小的单词排在前面 接下来,排序的 vector 中提取前 k 个单词,并将它们放入新的 vector v2 中 返回包含前 k 个最频繁单词的

3800

C++系列笔记(十一)

(key);如果您使用的编译遵循C++11标准,可使用关键字auto来简化迭代声明:auto iPairFound = mapIntToString.find(key);multimap容器可能包含多个键相同的键...为此,可使用multimap::count()确定有多少个值与指定的键对应,再对迭代递增,以访问这些相邻的值。...调用erase函数时将键作为参数,这将删除包含指定键的所有键-值对: mapObject.erase(key); erase函数的另一种版本接受迭代作为参数,并删除迭代指向的元素: mapObject.erase...(iElement); 还可使用迭代指定边界,从而将指定范围内的所有元素都从map或multimap删除: mapObject.erase(iLowerBound,iUpperBound); 提供自定义的排序谓词...使用的角度看,这两种容器与std::map和std::multimap差别不大,可以类似的方式执行实例化、插入和查找。

1.3K20

【C++】STL 容器总结 ( STL 各容器特点 | STL 个容器使用场景 | 单端数组容器 | 双端队列容器 | 双向链表容器 | 集合容器 | 多重集合容器 | 映射容器 | 多重映射容器 )

随机访问迭代 , 可使用下标访问 , 访问元素非常快 O(1) 复杂度 ; 插入 / 删除 : 尾部插入 / 删除效率高 O(1) 复杂度 ; 中间 和 头部插入/删除效率低 , 由于存储空间连续 ,...: 底层结构 : 底层由 双向链表 实现 , 特点是 存储空间 不连续 ; 访问遍历 : 不支持 随机访问迭代 , 只能通过迭代进行访问 ; 插入 / 删除 : 任意位置 插入 / 删除 效率都很高...只能通过迭代进行访问 ; 插入 / 删除 : 查询 / 插入 / 删除 效率 为 O(log n) 复杂度 ; 排序方式 : 默认使用 less 仿函数 , 即 < 运算符进行排序 ; 也可以自定义...元素 是 键值对 元素 ; 访问遍历 : 不支持 随机访问迭代 , 不能听过下标访问 , 只能通过迭代进行访问 ; 插入 / 删除 : 查询 / 插入 / 删除 效率 为 O(log n) 复杂度...; 与 set 集合容器相同 ; 排序方式 : 默认使用 less 仿函数 , 即 < 运算符进行排序 ; 也可以自定义 排序规则 仿函数 ; map 映射容器 不允许重复的键 , multimap

1.9K10

C++ STL 标准模板库(容器总结)算法

C++ 标准模板库STL,是一个使用模板技术实现的通用程序库,该库由容器container,算法algorithm,迭代iterator,容器和算法之间通过迭代进行无缝连接,其中所包含的数据结构都是目前最优解...: 数组向量并没有直接删除元素的方法,需要使用find()方法找到元素,迭代使用erase()删除元素....,然后使用迭代查找id=3的人物结构,找到输出它的Name属性....p3成员 // 删除p3数据,通过使用迭代遍历这个链表,查看情况....序列容器 Map映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值

2.2K10

C++【set 和 map 学习及使用

操作 下面来看看 set 的相关操作 2.2、set 的使用 set 的构造函数如下图所示: 可以直接创建一个空 set 使用,也可以根据迭代区间创建 set 注意: 创建时需要指定实值的类型...erase 删除指定元素 swap 交换两个容器 clear 清空容器中的所有元素 find 查找实值是否存在并返回迭代位置 count 统计容器中指定键值的数量 下面这段代码演示了上述功能的实际效果...实值 在 map 中会用到前面提到过的 pair 结构,其中 first 表示键值,second 表示实值 map 也有迭代,也是 双向迭代 3.2、map 的使用 构造 map 有以下几种方法...erase 删除指定元素 swap 交换两个容器 clear 清空容器中的所有元素 find 查找实值是否存在并返回迭代位置 count 统计容器中指定键值的数量 除了新增了一个 operator...multimap map 插入的返回值比 set 略微复杂,因为 既要表示是否成功,也要返回插入成功的迭代,所以返回值是一个 pair #include #include <

24220

6.1 C++ STL 序列映射容器

Map/Multimap 映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值...在插入之后,使用erase函数删除了其中的一个键值对。正向遍历和反向遍历分别使用了map的迭代和反向迭代。...代码中演示了如何使用map的find、lower_bound、upper_bound方法来查找指定的键值对,分别返回该元素的迭代、第一个大于等于该元素的迭代和第一个大于该元素的迭代。...接着,通过迭代遍历整个map容器,将每个学生的ID和姓名输出到屏幕上。最后,通过使用map容器的find方法,查找学生ID为1的学生信息,并将其姓名输出到屏幕上。...它使用了 vector存储员工信息,使用multimap存储分组信息,通过枚举类型和常量来定义部门编号,实现了分组和展示分组的功能。

18150

map容器multimap容器

目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型...优点 可以根据key值快速找到value值 map和multimap区别 map不允许容器中有重复key值元素....clear();                  //清除所有元素 erase( pos);          //删除pos迭代所指的元素,返回下一个元素的迭代。...erase(beg,end);   //删除区间[beg,end)的所有元素,返回下一个元素的迭代。 erase( key ) ;       //删除容器中值为key的元素。...,若存在,返回该键的元素的迭代;若不存在,返回set.end(); count(key);     //统计key的元素个数 代码  #include using namespace

42730

STL学习笔记(11)常用容器 mapmultimap

我们可以通过 map 的迭代改变 map 的键值吗?答案是不行,因为 map 的键值关系到 map 元素的排列规则,任 意改变 map 键值将会严重破坏 map 组织。...Map 和 list 拥有相同的某些性质,当对它的容器元素进行新增操作或者删除操作时,操作之前的所有迭代,在操 作完成之后依然有效,当然被删除的那个元素的迭代必然是个例外。...clear(); //删除所有元素 erase(pos); //删除 pos 迭代所指的元素,返回下一个元素的迭代。...erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代。 erase(keyElem); //删除容器中 key 为 keyElem 的对组。...6. map 查找操作 find(key); //查找键 key 是否存在,若存在,返回该键的元素的迭代;若不存在,返回 map.end(); count(keyElem);

47610

【C++】树型结构关联式容器:mapmultimapsetmultisetの使用指南(27)

set中的元素不可以重复 (因此可以使用set进行去重)。...使用set的迭代遍历set中的元素,可以得到 有序序列 set中的元素默认 按照小于来比较 set中查找某个元素,时间复杂度为: log_2 n set中的元素不允许修改 2)set的使用指南 【1】...是唯一的 使用迭代对multiset中的元素进行遍历,可以得到有序的序列 multiset中的元素不能修改 在multiset中找某个元素,时间复杂度为 O(log_2 N) multiset的作用...multimap通过key访问单个元素的速度通常比unordered_multimap容器慢,但是使用迭代 直接遍历multimap中的元素可以得到关于key有序的序列。...2) multimap使用指南 multimap中的接口可以参考map,功能都是类似的。 注意: multimap中的key是 可以重复 的。

16410

【c++】map和set&&AVL树&&红黑树详解&&模拟实现&&map和set封装

map的迭代 3.2.2.5 map中元素的修改 3.3 multiset 3.3.1 multiset的介绍 3.3.2 multiset的使用 3.4 multimap 3.4.1 multimap...(因此可以使用set进行去重) 使用set的迭代遍历set中的元素,可以得到有序序列 set中的元素默认按照小于来比较 set中查找某个元素,时间复杂度为:log_2 n set中的元素不允许修改...容器慢,但是使用迭代直接遍历multimap中的元素可以得到关于key有序的序列 multimap在底层用二叉搜索树(红黑树)来实现 注意:multimap和map的唯一不同就是:map中的key是唯一的...,而multimap中key是可以 重复的 3.4.2 multimap使用 multimap中的接口可以参考map,功能都是类似的 注意: multimap中的key是可以重复的 multimap...如果想要给红黑树增加迭代,需要考虑以前问题: 4.3.1.1 begin()与end() STL明确规定,begin()与end()代表的是一段前闭开的区间,而对红黑树进行中序遍历可以得到一个有序的序列

19110

【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍

set中的元素不可以重复(因此可以使用set进行去重)。 使用set的迭代遍历set中的元素,可以得到有序序列。 set中的元素默认按照小于来比较。 set中的元素查找某个元素,时间复杂度为: 。...const迭代,即crbegin 4. set的容量 函数声明 功能介绍 bool empty() const 检测set是否为空,空返回true,否则返回false size_type size(...与set的区别是,multiset中的元素可以重复,set是中value是唯一的。 使用迭代对multiset中的元素进行遍历,可以得到有序的序列。 multiset中的元素不能修改。...multimap通过key访问单个元素的速度通常比unordered_multimap容器慢,但是使用迭代直接遍历multimap中的元素可以得到关于key有序的序列。...3.4.2 -> multimap使用 multimap中的接口可以参考map,功能都是类似的。 注意: multimap中的key是可以重复的。

9310

6.1 C++ STL 序列映射容器

Map/Multimap 映射容器属于关联容器,它的每个键对应着每个值,容器的数据结构同样采用红黑树进行管理,插入的键不允许重复,但值是可以重复的,如果使用Multimap声明映射容器,则同样可以插入相同的键值...在插入之后,使用erase函数删除了其中的一个键值对。正向遍历和反向遍历分别使用了map的迭代和反向迭代。...代码中演示了如何使用map的find、lower_bound、upper_bound方法来查找指定的键值对,分别返回该元素的迭代、第一个大于等于该元素的迭代和第一个大于该元素的迭代。...接着,通过迭代遍历整个map容器,将每个学生的ID和姓名输出到屏幕上。最后,通过使用map容器的find方法,查找学生ID为1的学生信息,并将其姓名输出到屏幕上。...它使用了 vector存储员工信息,使用multimap存储分组信息,通过枚举类型和常量来定义部门编号,实现了分组和展示分组的功能。

16320

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

(set、multiset、map、multimap) 1、需要频繁在序列中间位置上进行插入和/或删除操作且不需要过多地在序列内部进行长距离跳转,应该选择list 2、vector头部与中间插入删除效率较低...std::tr1::unordered_map 是无序哈希表,但操作效率要比 std::map、std::hash_map、 __gnu_cxx::hash_map 都要高,可以研究一下。...迭代的主要好处是,为所有容器提供了一组很小的公共接口。迭代以++进行累进,以*进行提领,因而它类似于指针,我们可以把它视为一种smart pointer。...2、比如++操作可以遍历至群集内的下一个元素。至于如何做到,取决于容器内部的数据组织形式。 3、每种容器都提供了自己的迭代,而这些迭代能够了解容器内部的数据结构。...它们可以出于不同的目的而搜寻、排序、修改、使用那些元素。通过迭代的协助,我们可以只需编写一次算法,就可以将它应用于任意容器,这是因为所有的容器迭代都提供一致的接口。

1.3K00

【Example】C++ 标准库常用容器全面概述

empty 检查vector是否为空。 end 返回指向vector末尾的迭代。(非末尾元素) erase 指定位置删除vector中的一个元素或一系列元素。...它的每个元素内部都有指向前元素及元素的指针,每次插入与删除都只需更改前后“邻居”的指针,可以做到任何位置高效的插入与删除。...empty 判断list是否为空。 end 返回list中指向末尾的迭代。 erase 指定位置删除list中的一个元素或一系列元素。 front 返回对list中第一个元素的引用。...empty 检查 deque 是否为空。 end 返回指向末尾的迭代。 erase 指定位置删除一个或一系列元素。 front 返回第一个元素的引用。...可以在脑海中将其类比为排队等候银行柜员的人。 元素(人)可从行的后部添加,并且可以行的前部删除。 行的前部和后部都可以插入。 仅以这种方式访问前端和后端元素的限制是使用 queue 类的原因。

3.2K30

STL常用对象,不会搞得C++跟没学一样

map/multimap容器的数据结构也采用红黑树来实现的,map插入元素的键值不允许重复,类似multiset,multimap的key可以重复。...他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候栈顶开始弹出数据(最后被压入栈的,最先弹出)。因此栈也称先进出表。...使用vector需要注意以下几点: 1、当vector、string大量插入数据,即使删除了大量数据(或者全部都删除,即clear) 并没有改变容器的容量(capacity),所以仍然会占用着内存。...(5)使用迭代访问元素. vector::iterator it; for(it=vec.begin();it!...双向迭代(map multimap set multiset) 组合正向迭代和逆向迭代的功能,支持多遍算法 随机访问迭代(vector deque) 组合双向迭代的功能与直接访问容器中任何元素的功能

41120

【精选】算法设计与分析(第一章概述知识点)

6、STL迭代 每个容器都有自己的迭代 7、常用的STL容器(没时间可以看一个大概) (一)顺序容器 vector(向量容器) begin:得到数组头的指针 end:得到数组的最后一个单元+...在队列后面添加元素 myDeque.push_back(40); myDeque.push_back(50); myDeque.push_back(60); // 使用迭代遍历双端队列并打印元素...["Alice"] = 25; myMap["Bob"] = 30; myMap["Carol"] = 35; // 使用迭代遍历映射并打印键值对 std::cout...Bob"); // 使用范围循环遍历映射并打印键值对 std::cout << "删除键 Bob 的映射中的键值对: " << std::endl; for(const auto...; // 使用迭代遍历多重映射并打印键值对 std::cout << "多重映射中的键值对: " << std::endl; for(auto it = myMultiMap.begin

10510
领券