正如大多数人所知,C ++中的Set Container通常被实现为一个红黑树,当迭代容器时,条目按顺序出现,这可以被利用。
然而,我想对容器的迭代进行分页,如果容器包含,则为例:
set<int> set;
// insert some data
for(auto s : set)
cout << s << " " << endl;
1, 3, 5, 7, 9, 11, 13, 15
我想在容器range(2,5)
上进行范围查询yealding:向量3, 5, 7
,这似乎与集合无关,是否可以在任何STL容器上进行分页,或者这是你必须自己实施的情况吗?
答案 0 :(得分:1)
对于索引,只有一种方法http://www.cplusplus.com/reference/iterator/advance/ 但它具有线性时间复杂度
set<int>::iterator lower = s.begin();
std::advance(lower, 2);
auto upper = lower;
std::advance(upper, 6-2);
std::copy(lower, upper, std::ostream_iterator<int>(std::cout, " "));