已知迭代器时,std::set使用迭代器与值erase哪种更快?
std::set 迭代器erase与值erase的性能对比
当你已经获取到目标元素的迭代器时,使用迭代器版本的erase速度更快,原因如下:
迭代器版本:
void erase (iterator position)
这个版本直接通过迭代器定位到红黑树中的目标节点,只需执行一次节点删除和红黑树结构调整操作,时间复杂度为O(1)(红黑树中通过节点指针直接删除的开销是常数级)。值版本:
size_type erase (const value_type& val)
哪怕你确定元素存在,这个版本仍然需要先在红黑树中通过值查找对应的节点,查找的时间复杂度是O(log n),之后才会执行删除操作。整体时间复杂度为O(log n),比迭代器版本多了一次查找的额外开销。
总结:既然已经拿到了目标元素的迭代器,优先用迭代器版本的erase,能省去不必要的查找耗时。
内容的提问来源于stack exchange,提问作者jslee
相关产品推荐
相关产品推荐

