如何通过索引直接访问 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/