在 c++ 中使用带有映射的插入效率
Efficiency using insert with a map in c++
cplusplus.com 参考文献上有一个我不明白的例子。
在下面的示例中,当插入 C 时,为什么这比插入 B 的效率低?它们有什么不同?
// second insert function version (with hint position):
std::map<char,int>::iterator it = mymap.begin();
mymap.insert (it, std::pair<char,int>('b',300)); // max efficiency inserting
mymap.insert (it, std::pair<char,int>('c',400)); // no max efficiency inserting
该示例使用接受"提示"迭代的重载insert
来表示应在支持二叉树的哪个部分插入新元素。 该示例暗示it
- 初始化为begin()
- 在插入空表时尽可能好地提示,但在插入第二个元素时不太有用(可能根本没有用(。
我不确定为什么那个网站(历史上不是很好 - 我更信任 cppreference.com(对插入'b'
做出效率断言。 该标准的要求是(p
是提示迭代器(:
元素插入尽可能靠近
p
之前的位置。
begin()
之前的位置不存在。 如果有的话,不为第一个insert
提供提示可能会更有效。
在第二个insert
,'b'
处于begin()
,我们不想insert
'c'
"就在"'b'
之前,所以标准的"尽可能接近"开始了,尽管有暗示,insert
可以预期会摸索到正确的位置。
更一般地说,当树具有更多元素时,提示会很有用,因此insert
实现可以只检查提示附近的几个元素以确保顺序,而无需从二叉树的根向下工作。
相关文章:
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 如何编写用于多映射插入和擦除功能的 API?
- C++,映射插入&&文件流读取导致麻烦
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- 将一个映射插入到同一多重映射的另一个映射中会导致 SEG 错误
- 将元素插入 c++ 映射 - 插入方法的差异
- 使用boost::关联属性映射插入boost::BIMAP..失败
- STL 无序映射 - 插入到向量中
- C++在映射插入期间保证移动
- Visual Studio C++-std::映射插入失败
- C++映射插入
- 标准::映射插入/擦除的并发问题
- 不明确的映射.插入boost
- 无序映射插入复制元素
- 无序映射插入()错误
- 自定义键出现c++映射插入错误
- c++多映射插入两个以上的值
- 使用配对类型的映射插入
- 调试映射插入
- STL映射插入复制构造函数