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

C++ STL map ::擦除不存在的键

在C++中,STL(标准模板库)提供了一个名为map的关联容器,用于存储键值对。当尝试擦除一个不存在的键时,map会自动忽略该操作,因此不会引发任何异常或错误。

以下是一个简单的示例,演示了如何在C++中使用map容器:

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

int main() {
    std::map<int, std::string> my_map;

    // 添加元素
    my_map[1] = "one";
    my_map[2] = "two";
    my_map[3] = "three";

    // 尝试擦除不存在的键
    my_map.erase(4);

    // 输出剩余元素
    for (const auto& pair : my_map) {
        std::cout<< pair.first << ": "<< pair.second<< std::endl;
    }

    return 0;
}

在这个示例中,我们首先创建了一个map,然后添加了一些元素。接着,我们尝试擦除一个不存在的键(4),最后输出剩余的元素。由于map会自动忽略不存在的键,因此输出结果仍然与添加的元素相同。

需要注意的是,如果您使用map::find()方法来查找一个不存在的键,它将返回一个指向map中的尾部元素的迭代器。因此,在使用find()方法之后,您需要检查返回的迭代器是否指向一个有效的元素。

总之,在C++中,map容器提供了一种方便的方式来存储和管理键值对,同时它也能够自动处理一些常见的错误情况,例如尝试擦除不存在的键。

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

相关·内容

C++STLmap用法详解

MapSTL一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字值)数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据时候...//成片删除要注意是,也是STL特性,删除区间是一个前闭后开集合 //自个加上遍历代码,打印输出吧 } 10、mapswap用法mapswap不是一个容器中元素交换...11、排序 ·  mapsort问题map元素是自动按Key升序排序,所以不能对map用sort函数;这里要讲的是一点比较高深用法了,排序问题,STL中默认是采用小于号来排序,以上代码在排序上是不存在任何问题...还要说明是,map中由于它内部有序,由红黑树保证,因此很多函数执行时间复杂度都是log2N,如果用map函数可以实现功能,而STL Algorithm也可以完成该功能,建议用map自带函数,效率高一些...(标示红黑,相当于平衡二叉树中平衡因子),我想大家应该知道,这些地方 很费内存了吧,不说了……12、   map基本操作函数:     C++ maps是一种关联式容器,包含“关键字/值”对 begin

2.6K20

C++ STL map集合使用「建议收藏」

大家好,又见面了,我是你们朋友全栈君。 有时需要根据索引找到对应元素,像键值对一样查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。...map关联集合本质也是一棵红黑树,可以看做一个下标可以是任意类型数组。...头文件是map:#include 常用方法 1)map ds 建立一个名为ds、下标类型为A,元素类型为B映射表,例如 map 就是一个将string...,如果不存在,则返回ds.end() 6)ds.empty() 如果映射表为空,则返回1,否则返回0 7)ds.size() 返回映射表中元素个数 8)ds.erase(A) 删除这个”数组”中下标为...A元素 注意:在使用ds[A]访问“数组”下标为A元素时,如果对应元素不存在,则会自动创建下标为A、值为默认值(例如,所有数值类型默认值是0,string字符串是空字符串)元素。

33420

C++ STL容器之map容器快速入门

因此引进map容器。 map容器可以将任何类型(包括STL容器)映射到任何类型(包括STL容器)。...注意:(1)若是字符串映射到整型,则必须用string而不能用char数组,如map mp; (2)若也是STL容器(STL容器嵌套),则需要在>>后加上空格(C++11之前标准编译会将其视为移位操作...STL容器使用方式不同。...map可以使用it->first来访问,使用it->second来访问值 查找元素(通过迭代器查找) find(key):返回为key迭代器,时间复杂度为O(logN),N为map中映射个数 map...版权所有:可定博客 © WNAG.COM.CN 本文标题:《C++ STL容器之map容器快速入门》 本文链接:https://wnag.com.cn/298.html 特别声明:除特别标注,本站文章均为原创

91410

C++(STL):28 ---关联式容器map用法

其中,各个键值对和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义类型。...换句话说,map 容器中存储各个键值对不仅值独一无二,类型也会用 const 修饰,这意味着只要键值对被存储到 map 容器中,其值将不能再做任何修改。...创建C++ map容器几种方法 map 容器模板类中包含多种构造函数,因此创建 map 容器方式也有多种,下面就几种常用创建 map 容器方法,做一一讲解。...C++ 11 标准中,还为 map 容器增添了移动构造函数。当有临时 map 对象作为参数,传递给要初始化 map 容器时,此时就会调用移动构造函数。...C++ map容器包含成员方法 表 1 列出了 map 容器提供常用成员方法以及各自功能。

1K20

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

pair第一元素被视为键值,第二元素被视为实值 map中所有键值都不能重复 map每个键值只对应一个实值 称之为:唯愿一对一值啊。...结构设计 SGI STL map是以红黑树为底层模型(红黑树在后面的章节会讲),几乎所有的map行为,都只是调用了红黑树操作行为而已。...这个复制严格体现了STL左开右闭原则,键值为c那个键值对不会被复制过去 //如果要全部复制,右边放一个不存在键值就好 anothermap.insert({ { 'd', 100 }, {'e'...//不过不好意思,这个是VC11才开始支持哦 新增元素还有几个小问题,如何判断是否插入成功?如果对一键值重复插入又会如何?如果只插入不插入值会怎样呢?··· //首先,是不允许只插入一半。...如果想深入学习,可以关注我STL专栏,之后会有对STL-map源码剖析文章。

55920

C++(STL):29 ---关联式容器map 迭代器

C++ STL 标准库为 map 容器配备是双向迭代器(bidirectional iterator)。...find(key) 在 map 容器中查找为 key 键值对,如果成功找到,则返回指向该键值对双向迭代器;反之,则返回和 end() 方法一样迭代器。...也就是说,该方法将返回一个范围,该范围中包含为 key 键值对(map 容器键值对唯一,因此该范围最多包含一个键值对)。...图 2 表 1 部分成员方法功能示意图 注意,图中 Ei 表示是 pair 类对象,即键值对。对于 map 容器来说,每个键值对值都必须保证是唯一。...容器中各键值对值都是唯一,因此通过 map 容器调用此方法,其返回范围内最多也只有 1 个键值对。

81620

C++(STL):31 ---关联式容器map源码剖析

map特性 所有元素都会根据元素键值自动被排序 mappair结构 map所有元素类型都是pair,同时拥有实值(value)和键值(key) pair第一个元素视为键值,第二个元素视为实值...map不允许两个元素拥有相同键值 下面是stl_pair.h中pair定义: //代码摘录与stl_pair.h template struct pair...迭代器 不可以根据map迭代器改变节点键值,但是可以通过map迭代器改变节点实值 因此,map iterators既不是一种constant iterators,也不是一种mutable iterators...由于RB-tree是一种平衡二叉搜索树,自动排序效果很不错,所以标准STL map是以RB-tree为底层机制 又由于map所开放各种操作接口,RB-tree也都提供了,所以几乎所有的map操作行为...map源码 下面是map源代码摘录 //代码摘录与stl_map.h template class

1.2K10

C++ STL源码剖析之map、multimap、initializer_list

C++ STL源码剖析之map、multimap、initializer_list map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序依据是key。...mapkey不可修改,map与multimap插入调用函数不同,影响了其key是否对应value。 initializer_list使用 map有[]操作符,而multimap没有[]操作符。...上述默认仿函数为_Select1st,我们在stl_function中看到源码如下: template struct _Select1st : public unary_function...与multimap重要操作符 map与multimap[]操作符,map[]操作符返回传递给map第二个参数。...我们思考一下,因为multimap会根据key,有可能会对应多个value,那如果我们通过[]获取对应keyvalue,此时到底获取是哪个value呢,所以在STL源码中没有重载这个操作符!

98710

C++STL 容器 - map 关联容器 ④ ( map 容器常用 api 操作 | 查找指定元素 | 获取元素个数 | 获取大于等于指定元素 | 获取大于指定元素 | 获取等于指定 )

STL , Standard Template Library ) 中 , std::map 关联容器类 提供了 find() 成员函数 , 用于 查找容器中是否存在具有特定 元素 , 函数原型如下...三、获取大于等于指定元素 - std::map#lower_bound 函数 1、函数原型简介 在 C++ 语言 标准模板库 ( STL , Standard Template Library...) 中 , std::map 关联容器类 提供了 lower_bound() 成员函数 , 该函数返回一个迭代器 , 指向在 有序映射 中第一个 Key 大于等于 给定键值元素 ; 如果映射中不存在这样...四、获取大于指定元素 - std::map#upper_bound 函数 1、函数原型简介 在 C++ 语言 标准模板库 ( STL , Standard Template Library )...中 , std::map 关联容器类 提供了 upper_bound() 成员函数 , 该函数返回一个迭代器 , 指向在 有序映射 中第一个 Key 大于 给定键值元素 ; 如果映射中不存在这样

38810

C++STL 容器 - map 关联容器 ① ( std::map 容器简介 | std::map 容器排序规则 | std::map 容器底层实现 )

执行结果 一、std::map 容器 1、std::map 容器简介 std::map 容器 是 C++ 语言 标准模板库 ( STL , Standard Template Library ) 提供...一个 " 关联容器 " ; std::map 关联容器 , 提供 一对一数据处理能力 , 容器中元素自动按键 Key 排序 , Key 和 值 Value 是 一一对应 ; 第一个 Key... Key 对 元素 进行自动排序 ; 每个值在 std::map 容器中都是 唯一 , 键值不允许重复 ; 在 std::map 容器 中 , 可以 根据 Key 快速检索 容器中...; #include "map" 2、std::map 容器排序规则 std::map 容器 中 , 排序规则如下 : 默认排序规则 : 默认排序规则是 less 仿函数规则 , 即按照 升序进行排列...map 容器,为 string 类型,值为 int 类型 map myMap; myMap["Tom"] = 18;

13610

C++】 使用红黑树模拟实现STLmap与set

前言 前面的文章我们学习了红黑树,也提到了C++STLmap和set底层其实就是用红黑树来实现(而map和set使用我们前面也学过了)。...既然红黑树我们也学习过了,那这篇文章我们就用红黑树来简单实现一下STLmap和set,重点是学习它框架。 1....STL源码中map和set实现 那在正式实现之前,我们先一起来看一下STL(SGI版本)中map和set源码,大致了解一下库里面是怎么实现。...3.2 map、set结构定义 那然后我们来创建一个头文件,先把map结构简单定义一下 因为map里面pairkey不能修改,所以我们加一个const,库里面也是这样搞。...: 当插入成功时候,pairfirst为指向新插入元素迭代器,second为true,当插入失败时候(其实就是插入已经存在了),那它first为容器中已存在那个相同等效元素迭代器

13010

C++STLmap基本操作

STL中基本关联式容器有map和set,它们都是以红黑树作为其底层结构,具有非常高查找、删除效率,内容会按照键值自动排序。...3、insert插入操作会用到pair结构,pair结构在utility头文件中 4、查找数据时,如果使用find,并且要查找键值不存在,那么不会对原集合造成影响,如果使用[]查找,并且要查找不存在...,如果要查找不存在则会生成一个 52 cout<<map_str["aaa"]<<endl; 53 //find查找返回值是迭代器,成功则返回对应迭代器,不成功返回是end()迭代器...=map_str.end()) 57 coutsecond<<endl; 58 else 59 cout<<"这个键值对应元素不存在"<<endl...=map_str.end()) 63 coutsecond<<endl; 64 else 65 cout<<"这个键值对应元素不存在"<<endl

84990

C++STL 标准模板库 ③ ( STL 容器简介 | STL 容器区别 | STL 容器分类 | 常用 STL 容器 )

一、STL 容器简介 1、STL 容器区别 STL 容器 用于管理 一组 数据元素 , 不同类型 STL 容器 区别 主要是 节点 和 节点之间关系模型 不同 ; 容器内存空间是否连续 : 向量...主要是 研究 节点 与 节点 之间关系 ; 2、STL 容器分类 STL 容器 分为 2 大类 , 分别是 " 序列式容器 " 和 " 关联式容器 " ; 序列式容器 : Sequence Containers..., 多重集合 MultiSet , 映射 Map , 多重映射 MultiMap 是 关联式容器 ; 如下图所示 , 关联式容器元素位置与特定规则有关 , 与插入时间和位置无关 ; 3、常用 STL...; 多重集合 元素在容器中根据指定比较函数按键值排序 , 因此它是有序 ; 多重集合 元素不需要具有唯一 , 一个键值可具有多个相关联元素值 ; 需导入 头文件 ; 映射...map : 存放键值对 , 一个对应一个值 ; 需导入 头文件 ; 多重映射 multimap : 存放键值对 , 一个对应多个值 ; 需导入 头文件 ;

21730

C++STL 容器 - map 关联容器 ③ ( map 容器常用 api 操作 | map 容器迭代器遍历 | map#insert 函数返回值处理 )

容器迭代器 C++ 语言中 标准模板库 ( STL ) std::map 容器 提供了 begin() 成员函数 和 end() 成员函数 , 这两个函数 都返回一个迭代器 , 指向容器中元素 ;...#include "string" int main() { // 创建一个空 map 容器,为 string 类型,值为 int 类型 map myMap...: value_type 是 map 容器中存储元素类型 , 具体类型为 pair 类型 , Key 是类型 , T 是值类型 ; 参数对象 : 传入 value...Key 不存在 , 则插入新元素 , 返回 true ; 下面的代码中 , map 容器类型是 map , 其迭代器类型是 map::iterator..., bool> 类型 ; // 创建一个空 map 容器,为 string 类型,值为 int 类型 map myMap; // 插入键值对 ("

22410
领券