std::map 技巧
时间: 2023-11-09 12:47:48 浏览: 53
引用提到了一种优化技巧,即通过禁用同步来比较 C++ 的输入输出速度。这个技巧可以通过使用一个 lambda 表达式来实现。在 lambda 表达式中,调用 `std::ios::sync_with_stdio(false)` 来禁用同步,同时使用 `cin.tie(nullptr)` 和 `cout.tie(nullptr)` 来解绑输入和输出流。这样可以提高输入输出的效率。
引用中提到了 std::pair 的定义和实现。std::pair 是一个模板化的 struct,成员变量默认是公有类型。std::map 使用红黑树来实现,而 std::pair 在 std::map 中被用作键值对。map 的键不能被修改,但值可以被修改。std::map 封装了红黑树的接口,底层的操作都是借助于红黑树的特性来实现的。
引用中提到了 std::map 的实现中使用了空基类优化(empty base class optimization)。具体做法是,std::map 内部使用 rb_tree 作为成员变量,rb_tree 内部使用 rb_tree_impl 作为成员变量,而 rb_tree_impl 继承自 allocator。如果 allocator 是空类,那么 rb_tree_impl 的大小就和没有基类时一样。其他的 STL 容器也使用了相同的优化措施,比如 std::vector 对象是 3 个字长,std::list 对象是 2 个字长。boost 的 compressed_pair 也使用了相同的优化。
综上所述,std::map 是一个使用红黑树实现的关联容器,它使用 std::pair 作为键值对。同时,在实现中使用了空基类优化来减小对象的大小。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)