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

map的特性

  • 所有元素都会根据元素的键值自动被排序

map中的pair结构

  • map的所有元素类型都是pair,同时拥有实值(value)和键值(key)

  • pair的第一个元素视为键值,第二个元素视为实值

  • map不允许两个元素拥有相同的键值

  • 下面是stl_pair.h中pair的定义:

//代码摘录与stl_pair.htemplate <class _T1, class _T2>struct pair {typedef _T1 first_type;typedef _T2 second_type;_T1 first;_T2 second;pair() : first(_T1()), second(_T2()) {}pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}#ifdef __STL_MEMBER_TEMPLATEStemplate <class _U1, class _U2>pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}#endif};

map的迭代器

  • 不可以根据map的迭代器改变节点的键值,但是可以通过map的迭代器改变节点的实值

  • 因此,map iterators既不是一种constant iterators,也不是一种

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode360. 有序转化数组

给你一个已经 排好序 的整数数组 nums 和整数 a、b、c。对于数组中的每一个数 x&#xff0c;计算函数值 f(x) ax2 bx c&#xff0c;请将函数值产生的数组返回。 要注意&#xff0c;返回的这个数组必须按照 升序排列&#xff0c;并且我们所期望的解法时间复杂度为 O(n)。 示…

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

一、set set语法使用参阅:set的特性 set所有元素都会根据元素的键值自动被排序set中的键值就是实值,实值就是键值默认情况下set不允许两个元素重复set的迭代器 不能根据set的迭代器改变set元素的值。因为其键值就是实值,实值就是键值,如果改变set元素值,会严重破坏set组织…

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

作为关联式容器的一种,map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。 通常情况下,map 容器中存储的各个键值对都选用 string 字符…

C++(STL):26 ---关联式容器set用法

set容器都会自行根据键的大小对存储的键值对进行排序, 只不过 set 容器中各键值对的键 key 和值 value 是相等的,根据 key 排序,也就等价为根据 value 排序。 另外,使用 set 容器存储的各个元素的值必须各不相同。更重要的是,从语法上讲 set 容器并没有强制对存储元素的类…

leetcode387. 字符串中的第一个唯一字符

给定一个字符串&#xff0c;找到它的第一个不重复的字符&#xff0c;并返回它的索引。如果不存在&#xff0c;则返回 -1。 案例: s "leetcode" 返回 0. s "loveleetcode", 返回 2. 注意事项&#xff1a;您可以假定该字符串只包含小写字母。 思路&…

C++(STL):30 ---关联式容器map的operator[]和insert效率对比

通过前面的学习我们知道,map 容器模板类中提供有 operator[ ] 和 insert() 这 2 个成员方法,而值得一提的是,这 2 个方法具有相同的功能,它们既可以实现向 map 容器中添加新的键值对元素,也可以实现更新(修改)map 容器已存储键值对的值。举个例子(程序一): #include …

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

无论是前面学习的序列式容器,还是关联式容器,要想实现遍历操作,就必须要用到该类型容器的迭代器。当然,map 容器也不例外。C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、--p、p--、*p 操作,并且迭…

C++(STL):35---multimap容器

在掌握 C++ STL map 容器的基础上,本节再讲一个和 map 相似的关联式容器,即 multimap 容器。所谓“相似”,指的是 multimap 容器具有和 map 相同的特性,即 multimap 容器也用于存储 pair<const K, T> 类型的键值对(其中 K 表示键的类型,T 表示值的类型),其中各个…

在Spring + Hibernate中使用二级缓存配置步骤

在SSH中用二级缓存大概分以下几步&#xff1a; 1、首先在hbm文件里对涉及到的对象设置缓存方式&#xff0c;或根据情况设置自己需要的 2、在ehcache的配置文件里配置一个cache&#xff0c;name为这个类名 3、在applicationContext.xml的hibernate配置里 hibernate.cache.use_q…

C++(STL):34--- multiset容器详解

前面章节中,对 set 容器做了详细的讲解。回忆一下,set 容器具有以下几个特性: 不再以键值对的方式存储数据,因为 set 容器专门用于存储键和值相等的键值对,因此该容器中真正存储的是各个键值对的值(value);set 容器在存储数据时,会根据各元素值的大小对存储的元素进行…

C++(STL):36---关联式容器multiset、multimap源码剖析

一、multiset multiset的特性以及用法和set完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层RB-tree的insert_equal()而非insert_unique() multiset源码 //以下代码摘录于stl_multiset.htemplate <class _Key, class _Compare, class _Alloc>clas…

leetcode 455. 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺寸 sj 。…

C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源码剖析

这些关联容器底层都是使用hash table实现的.一、hash_set 由于hash_set底层是以hash table实现的,因此hash_set只是简单的调用hash table的方法即可与set的异同点:hash_set与set都是用来快速查找元素的但是set会对元素自动排序,而hash_set没有hash_set和set的使用方法相同在…

leetcode402. 移掉K位数字

给定一个以字符串表示的非负整数 num&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num "1432219", k 3 输出: "1219" 解释: 移除掉三个数字…

C++:43---派生类向基类转换、静态/动态的类变量

一、继承中类的类型转换规则 我们普通的编程规则规定,如果我们想把引用或指针绑定到一个对象上,则引用或指针的类型必须与所绑定的对象的类型一致或者对象的类型含有一种可接受的const类型转换规则。但是继承关系中的类比较例外,其规则如下:①我们可以将基类的指针或引用绑…

C++:42---类的内存大小

一、类内存的特点 类内无任何成员变量时,默认为1字节类内成员遵循内存的对齐补齐规则(与结构体的对齐补齐一样)函数不占内存(存在代码段)有继承关系时,父类的成员变量也属于类内寸的一部分,但是C++标准并没有明确规定派生类的对象在内存中如何分布(也就是说基类部分和派…

C++:40---继承中类成员的变化关系

一、派生类继承基类成员的规则 ①派生类继承了基类的所有数据成员与函数(不论公有成员、保护成员、私有成员)②派生类虽然继承了基类的所有成员,但是能不能访问基类的成员还与父类成员的属性(public、protected、private)以及继承方式有关③类静态成员:如果基类定义了一个静…

C++:37---继承概念、继承种类

这篇文章不详细分析继承和不同继承关系下的特点。 我将在后边几篇文章里专门针对继承关系来做分析。 一、基类与派生类的概念 基类(父类):在继承关系中处于上层的类派生类(子类):在继承关系中处于下层的类class A;class B;class C:public A //C为A的子类,A为C的父类{};…

C++:41---覆盖和隐藏

覆盖(重写) 概念: 基类的虚函数,如果派生类有相同的函数,则子类的方法覆盖了父类的方法 隐藏 概念: 当子类定义出的“成员变量、方法”与父类的重名时,父类的会被隐藏重点:对于函数,基类定义了一些列的重载函数,在派生类中只要有一个同名的函数(即使参数列表不…

leetcode179. 最大数

给定一组非负整数&#xff0c;重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大&#xff0c;所以你需要返回一个字符串而不是整数。 思路&#xff1a;贪心&#xff0c;对于…