std :: setを反復する方法?


91

私はこのコードを持っています:

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

->first価値はありません。どのようにして値を取得できますか?

回答:


139

セットのメンバーを取得するには、イテレーターを逆参照する必要があります。

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ループを使用できます

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

@ Mr.C64この場合のように、整数型ではそれほど重要ではありません。
一部のプログラマー、

1
コンテナーを変更する場合は、最初のコンテナーを使用する必要があることに注意してください。あるグーグルのために。
Legion Daeth 2016年

3
C ++ 11ソリューションはリファレンス(auto&f)を使用する必要があります。ほとんどの場合に適しています。この特定のケースについても同様です。
jaskmar 2016

こんにちはロブ、新しいu_long変数を宣言する以外にSERVER_IPSの要素を参照したい場合はどうなりますか?u_long&f = * it;を使用できますか ?そうでない場合は、どうすればよいですか?
BioCoder 2017

1
@BioCoder-参照変数を使用できますが、次のようにconst参照変数である必要がありますconst u_long& f = *it;
Robᵩ

15

*前を使用するだけitです:

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

これはそれを逆参照し、イテレータが現在ある要素にアクセスできるようにします。


7
ちょっとした注意:イテレータの余分なコピーを1つ回避するために、forループではit ++ではなく++ itを使用することが一般的に推奨されます。
user2891462

14

C ++ 11標準の別の例:

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

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

5

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;
}

2
またはfor(auto i : mset) std::cout << i;
ジャックディース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.