STL::MAP在C++中的内部实现
Internal Implementation of STL::MAP in C++
我想知道,MAP
在C++中是如何可用的,而不是MultiMap只是内部实现的简单Map。
我最能想到的是:
对于整数映射:A Balanced Binary Search Tree could be used .
对于字符串映射:Compressed Trie or something similar could be used .
我真的很好奇,它是如何在STL映射中真正实现的是否使用了某种散列函数,或者它与此完全不同。
包括std::map
在内的有序容器被实现为平衡二叉树(通常是RB树,但任何其他平衡树都符合要求)。
对于这类问题,您需要的最重要的信息是容器中每个操作的复杂性要求,这也是标准要求的。也就是说,最重要的答案是,只要满足复杂性要求,实际实现并不重要。
std::map是使用红黑树实现的。
在内部,类"map"公开继承了"__Tree"类,该类提供了红黑树的实现。请参阅<map.h>
这个__Tree类用于map/multimap/set/multiset。请参阅<xtree.h>
std::map基于平衡二进制搜索树,例如AVL树和红黑树(log(n))。在插入关键字的过程中,在平衡二进制搜索树中进行比较,以找到关键字的正确位置。由于树是平衡的,在插入过程中进行的最大比较将是树的最大高度,即O(log(n))。
std::unordereded_map基于哈希表。搜索元素的平均情况复杂度为O(1),但最坏情况复杂度仍然为O(n)
相关文章:
- 如何在跳过所有内部实现的同时跳转到 GDB 中 std::function 中的函数?
- 在命名空间内部还是外部实现 c++ 函数?
- 对象内部有大量数据容器,实现更高效的对象交换
- C 无需使用匿名名称空间即可实现内部链接
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- C++ - 在单独的文件中实现内部模板类的模板方法
- 如何在c++中实现内部抽象成员类
- 内部分布式时间服务器实现
- friend函数是如何在内部实现的
- 为具有内部指针的对象实现swap()
- 使用STL内部实现的红黑树
- 枚举在内部作为整数实现.那为什么会给出错误
- 内部套接字接收缓冲区实现
- std::vector 实现是否使用内部数组或链表或其他
- STL::MAP在C++中的内部实现
- 通过内部指针隐藏实现详细信息
- 如何实现将数据从用户应用程序传输到类内部存储器的类方法
- STL堆栈和队列的内部实现
- 如何实现内部实现依赖于模板参数的类
- Switch case语句如何在内部实现或工作