一个明显的(天真的?)方法是:
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);
}
这看起来很合理,但我仍然愿意接受更多建议。