明らかな(ナイーブ?)アプローチは次のようになります。
std::set<int> s;
for (int i = 0; i < SIZE; ++i) {
s.insert(i);
}
これはかなり読みやすいですが、私が理解していることから、挿入位置を繰り返し検索する必要があり、入力シーケンスがすでにソートされているという事実を利用していないため、最適ではありません。
std::set
数列で初期化するよりエレガントで効率的な(または事実上の)方法はありますか?
または、より一般的には、エントリの順序付きリストをコレクションに効率的に挿入するにはどうすればよいですか?
アップデート:
ドキュメントを見ると、挿入の位置を示すイテレータを受け入れるコンストラクタに気づきました。
iterator insert ( iterator position, const value_type& x );
これは、これがより効率的であることを意味します。
std::set<int> s;
std::set<int>::iterator it = s.begin();
for (int i = 0; i < SIZE; ++i) {
it = s.insert(it, i);
}
それは合理的に見えますが、私はまだより多くの提案を受け入れています。