在 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实现可以只检查提示附近的几个元素以确保顺序,而无需从二叉树的根向下工作。

最新更新