首页
学习
活动
专区
圈层
工具
发布

【c++】STL-set和map的使用

这次带来的是C++中关于map和set这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢?...而接下来所要学习的set/map都是关联式容器,是非线性结构,它们不是按照插入顺序存储,它会按照元素的键(key)的某种规则来进行存储或查找。...三、map的使用 map参考文档 1. map的声明 其中Key是map底层关键字类型的类型,T是map底层value的类型,其他的就跟set差不多了。...2. pair类型介绍 pair文档 pair是c++模板库里一个非常实用的模板类,它用于将两个值(可以是同类型,也可以是不同类型)组合成一个单一对象。...如果set里存在输入的key,那么它会返回它对应value值的引用,实现查找+修改的功能。如果不存在,它会进行一个插入操作,插入此key。

11710

C++中的STL中map用法详解

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

3.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++ STL-map与set的使用

    序列式容器与关联式容器 序列式容器和关联式容器是C++标准模板库(STL)中的两大类容器 序列式容器 序列式容器存储的元素在逻辑上呈现为线性序列。...常见的关联式容器包括: map:一个关联数组,存储键值对(key-value pairs),其中每个键都是唯一的。...的差异 键值唯一性 map:在map中,键(key)是唯一的,即每个键只能映射到一个值(value)。...如果尝试插入一个已存在的键,那么新的值会替换旧的值。 multimap:与map不同,multimap允许一个键对应多个值。这意味着在同一个multimap中,可以有多个键值对拥有相同的键。...操作符支持 map:map支持使用at()方法或[]操作符来查找或修改数据。如果使用[]操作符访问一个不存在的键,map会自动插入一个具有该键和默认值的键值对。

    30610

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

    大家好,又见面了,我是你们的朋友全栈君。 有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。...map关联集合的本质也是一棵红黑树,可以看做一个下标可以是任意类型的数组。...头文件是map:#includemap> 常用方法 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字符串是空字符串)的元素。

    52020

    【C++】STL标准模板库容器map

    在之前对STL的学习中,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,根据"数据在容器中的排列"特性,这些容器统称为序列式...下图列出了STL中的各种容器,以及其基层与衍生层的关系: 关联式容器map(映射)简介 我们先来看一下cplusplus.com - The C++ Resources Network...m1["苹果"] = 7; //访问不存在元素 m1["菠萝"]; //访问不存在元素并修改其value m1["香蕉"] = 3; for (auto e : m1) {...然后返回其引用,不同的是:当key不存在时,operator[]用默认 value与key构造键值对然后插入,返回该默认value,at()函数则会直接抛异常。...使用时与map包含的头文件相同 结语 希望这篇关于 STL标准模板库容器map 的博客能对大家有所帮助,欢迎大佬们留言或私信与我交流.

    34510

    全面解析 C++ STL 中的 set 和 map

    C++ 标准模板库(STL)中的关联式容器以其强大的功能和高效性成为开发者解决复杂数据组织问题的重要工具。其中,set 和 map 是最常用的两类关联容器。...与 set 相比,map 不仅存储键(key),还存储与每个键关联的值(value)。 map 的主要特点包括: 键唯一性:每个键在 map 中都是唯一的。...与 map 的区别在于,multimap 在插入重复键时不会丢失数据,而 map 会自动覆盖原有键。...因此,避免频繁修改键,而应使用新的键值对进行插入和删除。 6. 总结 通过本文的详细解析,我们全面了解了 C++ 中 set 和 map 容器的使用、底层实现以及高效操作技巧。...希望通过本文的学习,你能够深入掌握这些强大的容器,提升 C++ 编程技能。

    83910

    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 特别声明:除特别标注,本站文章均为原创

    1.3K10

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

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

    1.3K20

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

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

    74720

    C++之STL---set及map的基本使用

    map; 3.2pair类型介绍 std::pair 是 C++ 标准库中的一个简单模板类,用于将两个不同类型的值组合成一个单一单元。...如果键不存在,则会插入一个新的键值对。 2. 使用 insert() 方法插入 insert() 是另一种插入方法,它提供了更多的灵活性,例如插入多个键值对或避免重复插入。...如果键 不存在,operator[] 会自动插入一个键值对,其中键是给定的键,值是值类型的默认构造值(例如,对于 std::string,默认值是空字符串;对于 int,默认值是 0),然后返回对这个新值的引用...插入新的键值对 如果键不存在,operator[] 会自动插入一个新的键值对,并返回对新值的引用。这可以用来初始化新键的值。...值的引⽤,所以[]具备了查找+修改的功能 3.6multimap和map的差异 std::multimap和std::map都是C++标准库中的关联容器,它们都基于红黑树(自平衡二叉搜索树)实现,具有自动排序的特性

    16010

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

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

    1.4K20

    【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 大于 给定键值的元素 ; 如果映射中不存在这样的键

    2.6K10

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

    map的特性 所有元素都会根据元素的键值自动被排序 map中的pair结构 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.9K10

    C++ STL 中的 map:高效管理键值对的有序容器

    map和multimap参考文档 map以及multimap的库函数使用 map类的介绍 map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较...的核心特性 键值对存储:每个元素由一个唯一的键(key)和一个值(value)组成。...自动排序:默认按键的升序排序,也可通过自定义比较器实现自定义排序。 唯一键:同一个 map 中,键不能重复。底层实现:基于红黑树,支持高效的增删改查,时间复杂度为 (log)。...map的构造 map的构造我们关注以下几个接口即可。...// key不存在->插⼊ {"insert", string()} dict["insert"]; // 插⼊+修改 dict["left"] = "左边"; // 修改 dict["left

    61110

    《C++进阶之STL》【unordered_setunordered_map 模拟实现】

    【unordered_set/unordered_map 模拟实现】目录 往期《C++初阶》回顾: 《C++初阶》目录导航 往期《C++进阶》回顾: /------------ 继承多态 -...SGI - STL30 版本的源代码里,不存在unordered_set和unordered_map 这是因为 SGI - STL30 版本属于 C++11 之前的 STL 版本,而unordered_set...(非标准指并非 C++ 标准规定必须实现的容器 ) 其源代码可在stl_hash_set/、stl_hash_map/、stl_hashtable.h这些文件中找到 下面截取 hash_set...如果键不存在,插入新键值对(值为默认构造)并返回引用 */ }; } 测试文件:Test.cpp #define _CRT_SECURE_NO_WARNINGS 1 #include _ht; 总结:这样一来,迭代器遍历、修改的规则就和容器特性(unordered_set/unordered_map 的 “键是否可改” 需求 )匹配上了,既保证逻辑合理,也符合 C++

    17410

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

    C++ STL源码剖析之map、multimap、initializer_list map/multimap 以rb_tree为底层结构,因此有元素自动排序特点,排序的依据是key。...map的key不可修改,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,那如果我们通过[]获取对应key的value,此时到底获取的是哪个value呢,所以在STL源码中没有重载这个操作符!

    1.4K10

    《C++进阶之STL》【unordered_setunordered_map 使用介绍】

    + STL 中 unordered_set 容器的模板参数说明: 键类型(Key):unordered_set 中存储的键的类型。...网站上关于C++的 unordered_map容器的介绍:unordered_map - C++ 参考 template < class Key, // unordered_map::... > // 内存分配器(默认用标准分配器) > class unordered_map; 关于 C++ STL 中 unordered_map 容器的模板参数说明...使用自定义哈希、比较器和分配器 C++ 标准模板库(STL)中的 unordered_map 容器 相关内容,主要可以分为以下两个部分: 成员函数:提供了 unordered_map 容器的 各类操作接口...6.使用operator[]访问不存在的键:会自动插入新键,值为默认构造的空字符串 name = mymap["Deli"]; //注意:这里插入键"Deli",其默认值为空字符串,然后将该空值赋给

    19410
    领券