直接访问STL“集合”的元素

Md.*_*man 3 c++ iterator stl set

如何直接访问按索引设置的STL元素?

我收到与“operator+”不匹配的错误

#include<bits/stdc++.h>
..
set < long  long > s;
set <long long > :: iterator it;
it = s.begin() + k;
       cout << (*it);
Run Code Online (Sandbox Code Playgroud)

这里 k 是 require 元素的索引。

更具体地说,我想使用集合解决问题。

这是问题链接: k-th divisor

这是我的错误代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    set<long long> s;
    set<long long >:: iterator it;
    long long i,n,k, ln;
    cin >> n>> k;
        ln = sqrt(n);
        for(i = 1; i <= ln; i++)
        {
            if(n%i == 0)
            {
                s.insert(i);
                s.insert(n/i);
            }
        }
        if(s.size() < k)
            printf("-1\n");
        else
        {
            it = s.begin() + k;
            cout << (*it);
        }

        s.clear();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

帮帮我

Sla*_*ica 5

要使该表达式起作用:

s.begin() + k;
Run Code Online (Sandbox Code Playgroud)

迭代器必须满足RandomAccessIterator概念。std::set如文档中所述,它的迭代器是Bi DirectionIterator,因此您不能向其添加偏移量。你可以使用的是std::next()

it = std::next( s.begin(), k );
Run Code Online (Sandbox Code Playgroud)

但你需要注意这会使迭代器增加 k 倍。或者,您可以将容器更改为提供随机访问迭代器的容器(例如std::vector)。