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

为什么g ++ 版本的map <T> :: erase(map :: <T> iterator)不返回迭代器?

在C++中,std::map<T>::erase()函数用于删除指定位置的元素,并返回一个指向下一个元素的迭代器。当使用g++编译器时,std::map<T>::erase()函数可能不返回迭代器,这可能是因为g++编译器的实现与其他编译器的实现略有不同。

在C++标准库中,std::map<T>::erase()函数的定义如下:

代码语言:c++
复制
iterator erase(iterator position);

该函数接受一个迭代器作为参数,并返回一个指向下一个元素的迭代器。因此,如果您在使用g++编译器时遇到了std::map<T>::erase()函数不返回迭代器的问题,可以尝试使用以下代码来解决:

代码语言:c++
复制
std::map<T> my_map;
// ...
std::map<T>::iterator it = my_map.find(key);
if (it != my_map.end()) {
    std::map<T>::iterator next_it = my_map.erase(it);
    // 使用next_it迭代器继续访问下一个元素
}

在这个示例中,我们首先使用std::map<T>::find()函数找到要删除的元素。然后,我们使用std::map<T>::erase()函数删除该元素,并将返回的迭代器存储在next_it变量中。最后,我们使用next_it迭代器继续访问下一个元素。

总之,g++编译器的实现可能导致std::map<T>::erase()函数不返回迭代器。为了解决这个问题,您可以使用std::map<T>::find()函数和返回的迭代器来访问下一个元素。

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

相关·内容

STL之关联式容器map(二)

emplace_hint() 返回值不是一个 pair 对象,如果新元素被插入,它返回是指向新元素迭代;如果没有插入,返回是和这个键匹配现有元素迭代。...\n"; 4.获取元素 获取 map 容器开始和结束迭代以及反向迭代,它们都可以访问容器中所有元素。 map 成员函数 at() 返回是参数键对应对象。...也可以用指向删除元素迭代作为 erase() 参数。这种情况下,返回迭代指向被删除元素下一个位置。这个参数必须是容器中有效迭代,不能是结束迭代。...如果迭代参数指向是容器最后一个元素,那么会返回结束迭代。...erase(),它可以移除两个迭代参数所定义范围内元素。

54420

【C++】unordered系列容器封装

但对应迭代速度比较慢。 unordered_map允许[ ]下标访问! unordered_map只有正向迭代!没有反向迭代!...他们都提供以下接口: 迭代 函数 功能介绍 begin 返回unordered_map第一个元素迭代 end 返回unordered_map最后一个元素下一个位置迭代 cbegin 返回...unordered_map第一个元素const迭代 cend 返回unordered_map最后一个元素下一个位置const迭代 功能函数 函数 功能介绍 iterator find(const...K& key) 返回key在哈希桶中位置 size_t count(const K& key) 返回哈希桶中关键码为key键值对个数 insert 向容器中插入键值对 erase 删除容器中键值对...,再在hashtable中实例化普通迭代和const迭代: //迭代 typedef _HTIterator iterator; //const 迭代 typedef _HTIterator

9010

再探 setmap

map篇 放码过来 map迭代 自定义排序 [] 运算符重载函数 C++map迭代++操作是如何实现?...---- 元素检索 使用find()方法对set进行检索。找到则返回元素位置迭代,不然返回end()。 这个我熟,就不多说了。...,并返回指向该元素迭代 s.upper_bound(x)表示查找>x元素中最小一个,并返回指向该元素迭代 举个例子: 在set{3,5,7,8,13,16}中 对于在set中存在元素,比如...8 s.lower_bound(8)返回8所在位置迭代 s.upper_bound(8)返回13所在位置迭代 对于在set中不存在元素,比如12 两个函数返回则都是13所在位置迭代 特殊地...(x); } iterator upper_bound(const key_type& x) {return t.upper_bound(x); } }; ---- map迭代 map所有元素都会根据元素键值自动排序

67420

走近STL - map,只愿一键对一值

map迭代 这个还是比较关心东西,如果看了前面几篇的话。 我们不能通过迭代修改map键值,因为键值关系到map排列规则;但是如果要修改实值那是可以。...map迭代和list迭代有一定相似之处,当客户端对map使用增删操作之后,迭代仍然是有效,那个被删除节点迭代是个例外。...3、与map相关方法 还是选取最朴实无华,但确是最实用并经过亲测方法,兼容VC98版本编译。...it = maptest.begin(); maptest.erase(it); //通过迭代删除,有任何问题可以参见前面提到迭代 maptest.erase(maptest.begin(),...maptest.end()); //成片删除,很遗憾,这个遵循左开右闭原则,全删了1 查 // 关键字查询,找到则返回指向该关键字迭代,否则返回指向end迭代 // 根据map类型,返回迭代

57220

【C++进阶】unordered_set和unordered_map模拟实现(附源码)

unordered_se和unordered_map底层都是哈希桶。 哈希桶之前已经模拟实现过->哈希表开散列和闭散列 但是之前并没有实现哈希表迭代,接下来将会实现。...一.哈希表迭代实现 模板参数设计 因为 set存储是key,而map存储是 K-V 键值对,两个数据类型不一样,但底层又用都是哈希表,所以在哈希表模板参数中直接写成 T,但是还需要一个 K...为了适应unordered_set和unordered_map,Insert ,Find,Erase地接口返回值都要修改。...Insert 返回值改为 pair Find和Erase 返回值改为 Iterator 增加 begin ,end 接口 此时取模方式也有所变化,先用 KeyofT...因为 insert 接口返回是一个 pair ,你以为它是普通迭代,但实际上它是一个 const 迭代,而底层哈希桶 Insert 接口返回是一个普通迭代,这就造成了类型匹配问题。

11110

【C++】 使用红黑树模拟实现STL中map与set

大家想一下map和set都有find,erase这些接口,那它们有什么不同? ,对于set来说,它查找是不是就是按结点里面存那个key去查找啊,返回是对应元素迭代。 而map呢?...而map查找返回是整个pair迭代(其实还是结点里面元素迭代map里面存就是pair嘛。)...返回中序遍历最后一个结点下一个: 那最后一个结点后面就没有元素了啊,所以我们直接用空构造一个迭代返回就行了 那const版本begin和end我们也直接写一下: 另外这里稍微有点挑战就是+...最后返回一下++之后迭代。...,大家看 这里_t调用begin,返回是普通迭代,但是现在这个返回iterator是不是红黑树里面const迭代typedef,所以这里无法进行类型转换(普通迭代转换为const迭代

14510

c++ map和set_STLset和map区别

: 函数声明 功能介绍 iterator begin() 返回set中起始位置元素迭代 iterator end() 返回set中最后一个元素后面的迭代 const_iterator cbegin...() const 返回set中起始位置元素const迭代 const_iterator cend() const 返回set中最后一个元素后面的const迭代 reverse_iterator rbegin...() 返回set第一个元素反向迭代,即end reverse_iterator rend() 返回set最后一个元素下一个位置反向迭代,即 rbegin const_reverse_iterator...crbegin() const 返回set第一个元素反向const迭代,即cend const_reverse_iterator crend() const 返回set最后一个元素下一个位置反向...key_type& x ) 在map中插入key为x元素,找到返回该元素位置 迭代,否则返回end const_iterator find ( const key_type& x ) const

40320

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

返回,如果插入失败,说明x在set中已经存在,返回 void erase ( iterator position ) 删除set中...position位置上元素 size_type erase ( constkey_type& x ) 删除set中值为x元素,返回删除元素个数 void erase ( iterator first...:iterator代表新插入元素位置,bool代表释放插入成功 void erase ( iterator position ) 删除position位置上元素 size_type erase (...& x=) 在map中插入key为x元素,找到返回该元素位置迭代,否则返回end const_iterator find ( const key_type& x ) const 在map中插入key...为x元素,找到返回该元素位置const迭代,否则返回cend size_type count ( const key_type& x ) const 返回key为x键值在map个数,注意map

17610

【C++】红黑树封装实现 map 和 set

(本文中使用源码为 SGI stl30 版本) //map #include #include #include ...红黑树迭代其实和 list 迭代差不多 – 单独为迭代定义一个类,类中重载运算符来实现迭代各种行为,比如 operator*() 返回节点中数据,operator->() 返回节点地址..._t.begin() 和 _t.end() 返回都是红黑树普通迭代,而 set 中用于接受返回 iterator 其本质封装是红黑树 const 迭代,所以这里报错原因是 将红黑树普通迭代赋值给红黑树...const 迭代造成 – insert 函数返回是由红黑树普通迭代以及布尔值构成键值对,但是接受返回却是由红黑树 const 迭代 (set 普通迭代) 以及布尔值构成键值对...const 迭代 (set 普通迭代) 和布尔值组成键值对进行返回,这样就不会发生类型冲突了; 那么为什么红黑树普通迭代能够构造出 const 迭代呢?

82930

【C++修炼之路】18.map和set

set中位置,true>,如果插入失败,说明x在set中已经存在,返回 void erase ( iterator position ) 删除set中position...位置上元素 size_type erase ( constkey_type& x ) 删除set中值为x元素,返回删除元素个数 void erase ( iterator first,iterator...而也有唯一容器:multiset,multiset只排序不去重,下面讲这个时候会知道返回位置是中序遍历第一个。...3.2 map使用 头文件当然是:#include 1.map模板参数说明 key: 键值对中key类型 T: 键值对中value类型 Compare: 比较类型,map元素是按照...实际上是为了map能够更方便操作,举个例子,对于map,如果是迭代访问,返回时候不可能返回两个参数,这时候以pair为参数函数就派上用场了,直接返回pair类型就好了。

71700

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

迭代 函数声明 功能介绍 iterator begin() 返回set中起始位置元素迭代 iterator end() 返回set中最后一个元素后面的迭代 const_iterator cbegin...() 返回set第一个元素反向迭代,即end reverse_iterator rend() 返回set最后一个元素下一个位置反向迭代,即rbegin const_reverse_iterator...不用多说,在set中是找到则返回该位置迭代 在multiset中是返回第一个该元素位置迭代 erase在set中主要作用就是删除该迭代位置元素,或者删除迭代区间 第二种用法是针对multiset...upper_bound:返回>该值元素位置迭代 这两个函数通常可以和erase结合使用删除一段迭代区间 5. map 与 multimap map概念 概念: map 是 C++ 标准库中一个关联容器...) 删除[first, last)区间中元素 iterator find ( const key_type& x) 在map中插入key为x元素,找到返回该元素位置迭代,否则返回end const_iterator

24010

【c++】标准模板库STL入门简介与常见用法

注意:算法都是全局函数模板,如:for_each( )、find()、count()和sort()等 4、迭代Iterator迭代类似于C++指针,是一个指示,用来指示容器中某个元素,迭代出现使得容器与算法分离成为可能...(1)迭代 迭代类型: vector::iterator 举例:        for (vector::iterator iter=v.begin();iter<v.end();iter...迭代 begin()和end()返回头尾迭代; rbegin()和rend()返回尾头反向迭代:rbegin()返回最后一个元素迭代,rbegin++返回倒数第二个元素。...s.lower_bound(key);//返回key前面的元素迭代 s.upper_bound(key);//返回key后面的元素迭代 s.find(key);      //在s中查找键值key...map m(iter_F, iter_L); // 创建map类型对象m,存储迭代iter_F和 iter_L标记范围内所有元素副本。

69510

map和set简单介绍

(T2()) {} pair(const T1& a, const T2& b) : first(a), second(b) {} }; 树形结构关联式容器 根据应用场景桶,STL总共实现了两种不同结构管理式容器...map使用 map模板参数 key: 键值对中key类型 T: 键值对中value类型 Compare: 比较类型,map元素是按照key来比较,缺省情况下按照小于来比较,...,除非用户不想使用标准库提供空间配置 注意:在使用map时,需要包含头文件,set也一样 map构造: map迭代: 关于迭代使用我们依旧用代码来了解,更容易理解 map...(pair ("结束", "end")); mp.erase("结束"); for (map::iterator i = mp.begin...中元素是键值对 mapkey是唯一,并且不能修改 默认按照小于方式对key进行比较 map元素如果用迭代去遍历,可以得到一个有序序列 map底层为平衡搜索树(红黑树),查找效率比较高

6210

【C++】unordered_set 和 unordered_map 使用 | 封装

(),返回是KV模型中key 迭代 ---- 在迭代内存存储 节点指针 以及 哈希表 在迭代中使用哈希表,在哈希表中使用迭代 ,存在互相引用,需要使用前置声明 ---- 对于 operator...HashTable迭代 来实现unordered_map迭代 ---- unordered_map中operator[]实现 将insert返回值 变为pair类型,第一个参数为迭代...,第二个参数为布尔值 若返回成功,则调用新插入位置迭代 ---- 通过寻找哈希桶中是否有相同数据,若有则返回迭代以及false ---- 在unordered_map中实现operator...,但是在自己实现迭代中却可以通过 ---- 在STL中将 unordered_set普通迭代也为哈希桶const 迭代 ---- 调用begin时,虽然看似返回普通迭代,但是当前普通迭代是作为哈希桶...const迭代存在返回值依旧是 哈希桶普通迭代 ---- 在哈希桶自己实现迭代__HashIterator中 创建一个普通迭代 ,当传入普通迭代时,为拷贝构造 当传入 const

28240

map容器multimap容器

multimap允许容器中有重复key值元素 2.map构造和赋值 功能描述: 对map容器进行构造和赋值操作 函数原型 构造 map mp;            /map...clear();                  //清除所有元素 erase( pos);          //删除pos迭代所指元素,返回下一个元素迭代。...erase(beg,end);   //删除区间[beg,end)所有元素,返回下一个元素迭代erase( key ) ;       //删除容器中值为key元素。...//删除 m.erase(m.begin()); printMap(m); //删除重载版本 m.erase(3); printMap(m); //删除区间 m.erase(...查找和统计 功能描述 对map容器进行查找数据以及统计数据 函数原型 find(key);       //查找key是否存在,若存在,返回该键元素迭代;若不存在,返回set.end();

43730

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

iterator begin() 返回set中起始位置元素迭代 iterator end() 返回set中最后一个元素后面的迭代 const_iterator cbegin() const 返回...set中起始位置元素const迭代 const_iterator cend() const 返回set中最后一个元素后面的const迭代 reverse_iterator rbegin() 返回set...第一个元素反向迭代,即end reverse_iterator rend() 返回set最后一个元素下一个位置反向迭代,即rbegin const_reverse_iterator crbegin...() const 返回set第一个元素反向const迭代,即cend const_reverse_iterator crend() const 返回set最后一个元素下一个位置反向const迭代...在map中插入key为x元素,找到返回该元素位置迭代,否则返回end const_iterator find ( const key_type& x ) const 在map中插入key为x元素

8110

C++哈希-使用模拟封装

作为参数直接访问value 它迭代是单向正向迭代 接口介绍: unordered_map构造 函数声明 功能介绍 unordered_map 构造不同格式unordered_map对象 unordered_map...迭代 函数声明 功能介绍 begin 返回unordered_map第一个元素迭代 end 返回unordered_map最后一个元素下一个位置迭代 cbegin 返回unordered_map...第一个元素const迭代 cend 返回unordered_map最后一个元素下一个位置const迭代 unordered_map元素访问 函数声明 功能介绍 operator[] 返回与key...,将key对应value返回 unordered_map查询 函数声明 功能介绍 iterator find(const K& key) 返回key在哈希桶中位置 size_t count(const...它迭代是单向前向迭代 接口介绍: unordered_set当中常用成员函数 成员函数 功能 insert 插入指定元素 erase 删除指定元素 find 查找指定元素 size 获取容器中元素个数

91020

map和set概念及使用

set& x); set拷贝构造 3.set迭代 函数声明 功能介绍 iterator begin() 返回set中起始位置元素迭代 iterator...end() 返回set中最后一个元素后面的迭代 const_iterator cbegin() const 返回set中起始位置元素const迭代 const_iterator cend() const...返回set中最后一个元素后面的const迭代 reverse_iterator rbegin() 返回set第一个元素反向迭代,即end reverse_iterator rend() 返回set...最后一个元素下一个位置反向迭代,即rbegin const_reverse_iterator crbegin() const 返回set第一个元素反向const迭代,即cend const_reverse_iterator...& x ) 在map中插入key为x元素,找到返回该元素位置迭代,否则返回end const_iterator find ( const key_type& x ) const 在map中插入key

60920
领券