搜索
首页数据库mysql教程stl中的map、set、multimap、multiset,兼谈OceanBase造轮子

终于有机会有动力有能力看jjhou的《STL源码解析》了。采取快速翻阅模式,有望看完整本。 map和set的底层机制都是RB-Tree(红黑树),插入和查找都是O(lgN)的复杂度。map、set以前听说过,但从来不用,因为不了解,不知道背后是什么。通过读这本书了解到了其

终于有机会有动力有能力看jjhou的《STL源码解析》了。采取快速翻阅模式,有望看完整本。

map和set的底层机制都是RB-Tree(红黑树),插入和查找都是O(lgN)的复杂度。map、set以前听说过,但从来不用,因为不了解,不知道背后是什么。通过读这本书了解到了其背后的机制,也许在将来会用一用。

multimap和multiset没什么,只是对map和set的小修改而已。

除了这些,还有hash_map、hash_set,其底层机制不是RB-Tree,而是hash table。

了解到这些之后,map、set这些,都不神秘,都可控了。

目前还有一点需要再动手捉摸下:内存管理。STL的simple_allocator可定制行到底如何,得看看。

关于stl使用,最好的参考书莫过于cplusplus.com了

再扯一句OceanBase与STL。

OceanBase中几乎没有使用任何stl提供的功能,基本是在重复“发明轮子”,不过这种发明某种程度上我觉得看上去是合理的,比如:返回码、错误码的定制,这一点就具有很大的灵活性;内存使用方面可定制性也大很多;另外,也轻量很多;再另外,STL的接口也用得蛮头疼,一大段代码,全围着接口转了,也有办法不围着,多用用typedef就会看上去好很多。为什么OceanBase不用STL呢?我想,本质原因还是我们有一群很牛逼的工程师,有能力写出经得起考验的底层代码。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何在 C++ STL 中实现定制的比较器?如何在 C++ STL 中实现定制的比较器?Jun 05, 2024 am 11:50 AM

实现定制比较器可以通过创建一个类,重载运算符()来实现,该运算符接受两个参数并指示比较结果。例如,StringLengthComparator类通过比较字符串长度来排序字符串:创建一个类并重载运算符(),返回布尔值指示比较结果。在容器算法中使用定制比较器进行排序。通过定制比较器,我们可以根据自定义标准对数据进行排序或比较,即使需要使用自定义比较标准。

如何获取C++ STL容器的大小?如何获取C++ STL容器的大小?Jun 05, 2024 pm 06:20 PM

通过使用容器的size()成员函数,可以获取容器中元素的数量。例如,vector容器的size()函数返回元素数量,list容器的size()函数返回元素数量,string容器的length()函数返回字符数量,deque容器的capacity()函数返回分配的内存块数量。

如何设计自定义的 STL 函数对象来提高代码的可重用性?如何设计自定义的 STL 函数对象来提高代码的可重用性?Apr 25, 2024 pm 02:57 PM

使用STL函数对象可提高可重用性,包含以下步骤:定义函数对象接口(创建类并继承自std::unary_function或std::binary_function)重载operator()以定义函数行为在重载的operator()中实现所需的功能通过STL算法(如std::transform)使用函数对象

使用 C++ STL 时如何处理哈希冲突?使用 C++ STL 时如何处理哈希冲突?Jun 01, 2024 am 11:06 AM

C++STL哈希冲突的处理方式有:链地址法:使用链表存储冲突元素,适用性好。开放寻址法:在桶中查找可用位置存储元素,子方法有:线性探测:按顺序查找下一个可用位置。二次探测:以二次方形式跳过位置进行查找。

C++ STL容器中常见类型有哪些?C++ STL容器中常见类型有哪些?Jun 02, 2024 pm 02:11 PM

C++STL中最常见的容器类型分别是Vector、List、Deque、Set、Map、Stack和Queue。这些容器为不同的数据存储需求提供了解决方案,例如动态数组、双向链表和基于键和值的关联容器。实战中,我们可以使用STL容器高效地组织和访问数据,例如存储学生成绩。

如何利用 C++ STL 实现代码的可读性和维护性?如何利用 C++ STL 实现代码的可读性和维护性?Jun 04, 2024 pm 06:08 PM

通过利用C++标准模板库(STL),我们可以提升代码的可读性和维护性:1.使用容器取代原始数组,提高类型安全性和内存管理;2.利用算法简化复杂任务,提高效率;3.使用迭代器增强遍历,简化代码;4.使用智能指针提升内存管理,减少内存泄漏和悬垂指针。

如何排序C++ STL容器?如何排序C++ STL容器?Jun 02, 2024 pm 08:22 PM

C++中对STL容器排序的方法:使用sort()函数,原地排序容器,如std::vector。使用有序容器std::set和std::map,元素在插入时自动排序。对于自定义排序顺序,可以使用自定义比较器类,如按字母顺序排序字符串向量。

C++ STL中的迭代器C++ STL中的迭代器Aug 21, 2023 pm 08:52 PM

C++STL(StandardTemplateLibrary)是C++程序语言的标准库之一,它包含了一系列的标准数据结构和算法。在STL中,迭代器(iterator)是一种非常重要的工具,用于在STL的容器中进行遍历和访问。迭代器是一个类似于指针的对象,它可以指向容器(例如vector、list、set、map等)中的某个元素,并可以在容器中进行移动、

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)