c++ - 直接访问STL "set"的元素

标签 c++ stl iterator set

如何通过索引直接访问 STL set 的元素??

我遇到错误不匹配'operator+'

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

这里的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;
}

帮帮我

最佳答案

要让这个表达式起作用:

s.begin() + k;

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

it = std::next( s.begin(), k );

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

关于c++ - 直接访问STL "set"的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834745/

相关文章:

c++ - 使用 IUP C/C++ 更改切换前景色

c++ - 带有 STL vector 的自定义分配器(在 Visual Studio 工具链中)

c++ - 将局部变量存储在类的 STL 容器中安全吗?

c++ - 为什么标准不允许 std::for_each 在无效的随机访问迭代器范围内具有明确定义的行为?

c++ - 计算不同数字数量的省时方法

c++ - 从 std::string 解析两个或一个数字

c++ - 类层次结构的模板类?

c++ - 为什么调用 std::vector::back() 会使我的程序崩溃

c++ - 将迭代器传递给模板

c++ - 在c++中,可以使用集合的迭代器来查找集合中两个连续元素之间的差异吗?