如何迭代 std: : set?

我有这个密码:

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
u_long f = it; // error here
}

There is no ->first value. How I can obtain the value?

277492 次浏览

为了检索集合中的成员,必须取消对迭代器的引用。

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
u_long f = *it; // Note the "*" here
}

如果你有 C + + 11的特性,你可以使用 基于范围的循环:

for(auto f : SERVER_IPS) {
// use f here
}

只要在 it之前使用 *:

set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
cout << *it;
}

这将取消对它的引用,并允许您访问迭代器当前所在的元素。

如何迭代 std: : set?

int main(int argc,char *argv[])
{
std::set<int> mset;
mset.insert(1);
mset.insert(2);
mset.insert(3);


for ( auto it = mset.begin(); it != mset.end(); it++ )
std::cout << *it;
}

C + + 11标准的另一个例子:

set<int> data;
data.insert(4);
data.insert(5);


for (const int &number : data)
cout << number;

另一件对初学者可能有用的事情是,因为 std: : set 没有分配连续的内存块,如果有人想要迭代到 kth元素的正常方式将不起作用。 例如:

std::vector<int > vec{1,2,3,4,5};
int k=3;
for(auto itr=vec.begin();itr<vec.begin()+k;itr++) cout<<*itr<<" ";

std::unordered_set<int > s{1,2,3,4,5};
int k=3;
int index=0;
auto itr=s.begin();
while(true){
if(index==k) break;
cout<<*itr++<<" ";
index++;
}