从集合中的任意索引获取元素

Pro*_*mer 10 c++ stl

我有一组类型set<int>,我想得到一个不是开始的地方的迭代器.

我正在做以下事情:

set<int>::iterator it = myset.begin() + 5;
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么这不起作用以及将迭代器放到我想要的地方的正确方法是什么.

R. *_*des 20

myset.begin() + 5;仅适用于随机访问迭代器,迭代器std::set不是.

对于输入迭代器,有以下功能std::advance:

set<int>::iterator it = myset.begin();
std::advance(it, 5); // now it is advanced by five
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,也有std::next类似但不改变其参数的东西:

auto it = std::next(myset.begin(), 5);
Run Code Online (Sandbox Code Playgroud)

std::next需要一个前向迭代器.但既然std::set<int>::iterator是一个双向迭代,都advancenext正常工作.

  • @“R. Martinho Fernandes”这些不是线性时间复杂度的方法吗?我想知道是否有某种方法可以在对数时间内工作,因为集合毕竟是平衡二叉树? (2认同)