C++ 从集合中的任意索引获取元素
我有一个类型集C++ 从集合中的任意索引获取元素,c++,stl,C++,Stl,我有一个类型集set,我想得到一个迭代器,它不是开始 我正在做以下工作: set<int>::iterator it = myset.begin() + 5; set::iterator it=myset.begin()+5; 我很好奇为什么这不起作用,以及如何正确地将迭代器放到我想要的位置。myset.begin()+5仅适用于随机访问迭代器,而std::set中的迭代器不适用 对于输入迭代器,有函数std::advance: set<int>::iterator
set
,我想得到一个迭代器,它不是开始
我正在做以下工作:
set<int>::iterator it = myset.begin() + 5;
set::iterator it=myset.begin()+5;
我很好奇为什么这不起作用,以及如何正确地将迭代器放到我想要的位置。myset.begin()+5
仅适用于随机访问迭代器,而std::set
中的迭代器不适用
对于输入迭代器,有函数std::advance
:
set<int>::iterator it = myset.begin();
std::advance(it, 5); // now it is advanced by five
std::next
需要一个正向迭代器。但是由于std::set::iterator
是一个双向迭代器,所以advance
和next
都可以工作。从C++11 std::set获取索引处的元素
<> >代码> STD::C++中的设置没有索引的吸引子,所以你必须自己迭代列表,然后复制到数组中,然后索引。
例如:
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> uniqueItems; //instantiate a new empty set of integers
uniqueItems.insert(10);
uniqueItems.insert(20); //insert three values into the set
uniqueItems.insert(30);
int myarray[uniqueItems.size()]; //create an int array of same size as the
//set<int> to accomodate elements
int i = 0;
for (const int &num : uniqueItems){ //iterate over the set
myarray[i] = num; //assign it to the appropriate array
i++; //element and increment
}
cout << myarray[0] << endl; //get index at zero, prints 10
cout << myarray[1] << endl; //get index at one, prints 20
cout << myarray[2] << endl; //get index at two, prints 30
}
#包括
#包括
使用名称空间std;
int main(){
set uniqueItems;//实例化一个新的空整数集
唯一项目。插入(10);
uniqueItems.insert(20);//在集合中插入三个值
唯一项目。插入(30);
int myarray[uniqueItems.size()];//创建一个与
//设置为容纳元素
int i=0;
for(const int&num:uniqueItems){//迭代集合
myarray[i]=num;//将其分配给适当的数组
i++;//元素和增量
}
cout运算符+不定义此结构,只对随机访问迭代器有意义
第一个解决方案:
您可以使用,该函数重复使用递增或递减运算符(运算符++或运算符-),直到n个元素被提升
set<int>::iterator it = myset.begin();
std::advance(it, 5);
std::out << *it << std::endl; // == it + 5
set::iterator it=myset.begin();
std::advance(it,5);
STD::C和C++不是同一种语言。@ R. Martinho Fernandes不是线性时间复杂度的方法吗?我想知道在LoGigTimeTimes中是否有一些方法是有效的,因为毕竟,集合是平衡二叉树的。
int getSetAtIndex(set<int> myset, int index){
int i = 0;
for (const int &num : myset){ //iterate over the set
if (i++ == index){
return num;
}
}
string msg = "index " + to_string(index) + \
"is out of range";
cout << msg;
exit(8);
}
int main(){
set<int> uniqueItems; //instantiate a new empty set of integers
uniqueItems.insert(10);
uniqueItems.insert(20); //insert three values into the set
uniqueItems.insert(30);
cout << getSetAtIndex(uniqueItems, 1);
}
set<int>::iterator it = myset.begin();
std::advance(it, 5);
std::out << *it << std::endl; // == it + 5
set<int>::iterator it1 = myset.begin();
std::next(it1, 5); // == it1 + 5
std::out << *it1 << std::endl; // == it1 + 5
set<int>::iterator it2 = myset.end();
std::prev(it2, 5); // == it2 - 5
std::out << *it2 << std::endl; // == it2 - 5