首页
学习
活动
专区
工具
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(),它可以移除两个迭代参数所定义范围内元素。

56220

【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

10910
  • 【C++】map和set使用

    val 不存在返回 0 ,存在返回 1 size_type erase ( const value_type& val); // 删除⼀段迭代区间iterator...erase (const_iterator first, const_iterator last); // 返回⼤于等 val 位置迭代 iterator lower_bound...map⽀持正向和反向迭代遍历,遍历默认按key升序顺序,因为底层是⼆叉搜索树,迭代遍历⾛中序;⽀持迭代就意味着⽀持范围for,map⽀持修改value数据,⽀持修改key数据,修改关键字数据...// 删除⼀个迭代位置iterator erase (const_iterator position); // 删除 k , k 存在返回 0 ,存在返回 1...map第⼀个⽀持修改⽅式时通过迭代迭代遍历时或者find返回key所在iterator修改,map还有⼀个⾮常重要修改接⼝operator[],但是operator[]不仅仅⽀持修改,还⽀持插

    7310

    再探 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所有元素都会根据元素键值自动排序

    69820

    走近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类型,返回迭代

    58520

    【C++高阶】深度剖析:从零开始模拟实现 unordered 奥秘

    = end()) { // 插入失败返回已有节点迭代和false return make_pair(it, false); } // 负载因子 if (_n == _tables.size...new Node(data); // 头插 newnode->_next = _tables[hashi]; _tables[hashi] = newnode; ++_n; // 插入成功返回新节点迭代和...ture return make_pair(iterator(newnode, this, hashi), true); } // 返回类型修改成了迭代 iterator Find(const...HashTable迭代 迭代基本设计 代码示例(C++): // 为了实现简单,在哈希桶迭代类中需要用到hashBucket本身,所以我们要进行一下前置声明,并且我们在 HashTable 中也要设置一个友元..._hashi),ret.second); } // 因为用到都是const迭代,所以非const迭代我们可以写 /*iterator begin() { return _ht.begin

    7510

    【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 接口返回是一个普通迭代,这就造成了类型匹配问题。

    14810

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

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

    15710

    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

    42020

    【C++】map和set使用

    使用set迭代遍历set中元素,可以得到有序序列 set中元素默认按照小于来比较 set中查找某个元素,时间复杂度为:logN set中元素不允许修改(为什么?)...set构造函数: 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...key_type& x) 在map中插入key为x元素,找到返回该元素位置迭代,否则返回end const_iterator find ( const key_type& x ) const

    6010

    【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

    19810

    【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 迭代呢?

    90730

    【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

    40510

    【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类型就好了。

    72900

    初识C++ · map和set使用

    .end()); s1 = s2; return 0; } 有关迭代部分 如文档解释iterator一样,set支持是双向迭代,所以有begin,就有rbegin,cbegin也是不可少...iterator,也就是返回那个值迭代,我们就可以用于删除,或者是遍历,删除也可以用迭代来删除,是erase第二个重载: int main() { set s1{ 1,2,3,4,5,6,7,8...= myset.end(); ++it) std::cout << ' ' << *it; return 0; } 所以最终打印就是把30 - 60部分删除了,但是这里返回迭代一定不是60...2 map map是key - value模型: 可以看到模板参数有4个,其中有key T 仿函数和空间配置。...key所在迭代类型,那么简单模拟实现一下就是: V& operator[](const T& key) { pair ret = insert(make_pair

    5810

    【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标记范围内所有元素副本。

    71610

    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底层为平衡搜索树(红黑树),查找效率比较高

    7010

    【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

    31940
    领券