使用.begin()和.end()对于std :: set的std :: inserter有区别吗?

时间:2011-05-06 09:47:57

标签: c++ stl stdset insert-iterator

如果it1和it2之间有什么区别?

std::set<sometype> s;

auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());

2 个答案:

答案 0 :(得分:33)

在实践中,并不多。如果您将大量已经在订单元素中插入空set,那么第二个元素会更快,但这就是它。 std::insert_iterator使用迭代器调用insert; std::set将其解释为提示,并且如果插入位于提示之前,则以恒定时间(而不是lg n)插入。 (实际上,如果set为空,我认为两者都会完全相同。)

答案 1 :(得分:7)

来自http://www.sgi.com/tech/stl/insert_iterator.html

但是,在Sorted Associative Container的情况下,insert_iterator的构造函数中的迭代器几乎无关紧要。新元素不一定会形成连续的范围;它们将按键按升序显示在容器中的适当位置。它们的插入顺序仅影响效率:将已排序的范围插入到排序关联容器中是O(N)操作。