在 C++ 中插入 map 究竟是如何工作的?

how exactly insert of map exactly work in c++?

提问人:DarkSide77 提问时间:3/3/2022 更新时间:3/3/2022 访问量:108

问:

我正在尝试自己在 c++ 中重新实现地图容器,但我被困在该方法中。insert

注意:我知道地图使用自平衡树(红黑树),所以当你插入一个新元素时,你需要遵守二叉搜索树规则。

现在我的问题是:

(C++98) 中的映射有 3 个插入成员函数

single element (1)  pair<iterator,bool> insert (const value_type& val);

with hint (2)       iterator insert (iterator position, const value_type& val);

range (3)           template <class InputIterator>
                    void insert (InputIterator first, InputIterator last);

单个元素 (1) 是明确的。

但第二个不是。

我想知道提示是如何使用的,我如何检查给我的位置是否尊重树的规则,以及如何修复它。

注2:这是基于c++98,我知道这在C++11中发生了变化。

C++ 标准

评论

1赞 JHBonarius 3/3/2022
你知道它是如何实现的吗?即你知道什么是红黑树吗?std::map
1赞 JHBonarius 3/3/2022
@Darth-CodeX,这有什么帮助?
0赞 JHBonarius 3/3/2022
@Darth-CodeX 不,它不是,它只是标题。此外,OP要求作出解释。他/她不想阅读 50000 行代码。此外:重新实现现有代码可能是一个很好的练习。
0赞 Alan Birtles 3/3/2022
这是 libstdc++ 实现,看起来它基本上会检查提示是否在正确的位置,否则会找到正确的插入位置

答:

0赞 Caleth 3/3/2022 #1

当提示正确时,提示重载具有更严格的复杂性要求。如果提示不正确,则忽略它。

复杂性

如果插入发生在提示之后的位置,则摊销常数,容器大小的对数 否则。

如果您已经知道(甚至有一个很好的猜测)要插入的值应该放在哪里,例如,您正在插入一系列已经排序的值,则可以使用提示重载作为优化。