セット内の要素を取得する方法について混乱しています。イテレータを使用する必要があると思いますが、どのようにステップスルーしますか?
type
をたとえばint
..に置き換え、var
をセットの名前に置き換えます
for (set<type>::iterator i = var.begin(); i != var.end(); i++) {
type element = *i;
}
ただし、最善の方法は boost :: foreach を使用することです。上記のコードは単純に次のようになります。
BOOST_FOREACH(type element, var) {
/* Here you can use var */
}
#define foreach BOOST_FOREACH
を実行して、次のことを実行することもできます。
foreach(type element, var) {
/* Here you can use var */
}
例えば:
foreach(int i, name_of_set) {
cout << i;
}
イテレータを使用する:
std::set<int> si;
/* ... */
for(std::set<int>::iterator it=si.begin(); it!=si.end(); ++it)
std::cout << *it << std::endl;
MSDNやcplusplus.comなどの多くのリファレンスが例を提供していることに注意してください- 1つの例 。 ;)
セット内のすべての要素を一覧表示するには、次のようにします。
#include <iostream>
#include <set>
using namespace std;
int main ()
{
int myints[] = {1,2,3,4,5};
set<int> myset (myints,myints+5);
set<int>::iterator it;
cout << "myset contains:";
for ( it=myset.begin() ; it != myset.end(); it++ )
cout << " " << *it;
cout << endl;
return 0;
}
セット内の特定の要素かどうかを確認するには、セットのSTLクラスのfind()メソッドを使用できます。
C++ 0xラムダ構文を使用してVS2010Beta2で表示されているものが気に入っています。
std::for_each( s.begin(), s.end(),
[](int value)
{
// what would be in a function operator() goes here.
std::cout << value << std::endl;
} );
C++ 11以降の場合:
std::set<int> my_set;
for (auto item : my_set)
std::cout << item << endl;
set<int> os;
for (auto itr = os.begin(); itr != os.end() ; ++itr) cout << *itr << endl;