35

it1 と it2 に違いはありますか?

std::set<sometype> s;

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

2 に答える 2

33

実際には、それほど多くはありません。空の にすでに順序付けられた多数の要素を挿入している場合set、2 番目の方が多少速くなりますが、それだけです。 イテレータでstd::insert_iterator呼び出します。はそれをヒントとして解釈し、挿入がヒントの直前にある場合は (lg n ではなく) 一定の時間で挿入します。(実際、が空の場合、どちらもまったく同じことをすると思います。)insertstd::setset

于 2011-05-06T09:56:49.257 に答える
7

http://www.sgi.com/tech/stl/insert_iterator.htmlから

ただし、Sorted Associative Container の場合、insert_iterator のコンストラクターの iterator はほとんど関係ありません。新しい要素は必ずしも連続した範囲を形成するとは限りません。それらはコンテナ内の適切な場所に、キーの昇順で表示されます。それらが挿入される順序は効率にのみ影響します。既にソートされた範囲をソート済み連想コンテナーに挿入することは、O(N) 操作です。

于 2012-11-29T10:41:19.943 に答える