2011-01-11 8 views
2

ベクトルの要素をどのように得ることができますか?これは私が持っているコードです:C++でのベクトルのセット

std::set< std::vector<int> > conjunto; 
std::vector<int> v0 = std::vector<int>(3); 
v0[0]=0; 
v0[1]=10; 
v0[2]=20; 
std::cout << v0[0]; 
conjunto.insert(v0); 
v0[0]=1; 
v0[1]=11; 
v0[2]=22; 
conjunto.insert(v0); 
std::set< std::vector<int> >::iterator it; 
std::cout << conjunto.size(); 
for(it = conjunto.begin(); it != conjunto.end(); it++) 
    std::cout << *it[0] ; 

答えて

2

もうすぐです。あなたはセットイテレータからベクトルを引き出す必要があります。下記参照。

main() 
{ 
    std::set< std::vector<int> > conjunto; 
    std::vector<int> v0 = std::vector<int>(3); 
    v0[0]=0; 
    v0[1]=10; 
    v0[2]=20; 
    std::cout << v0[0] << endl; 
    conjunto.insert(v0); 
    v0[0]=1; 
    v0[1]=11; 
    v0[2]=22; 
    conjunto.insert(v0); 
    std::set< std::vector<int> >::iterator it; 
    std::cout << "size = " << conjunto.size() << endl; 
    for(it = conjunto.begin(); it != conjunto.end(); it++) { 
    const std::vector<int>& i = (*it); // HERE we get the vector 
    std::cout << i[0] << endl; // NOW we output the first item. 
    } 

出力:

$ ./a.out 
0 
size = 2 
0 
1 
7

あなたがforループを変更したいので[]オペレータは、*演算子よりも優先されます:今すぐ

for (it = conjunto.begin(); it != conjunto.end(); it++) 
    std::cout << (*it)[0] << std::endl; 
1
std::set<std::vector<int> >::const_iterator it = cunjunto.begin(); 
std::set<std::vector<int> >::const_iterator itEnd = conjunto.end(); 

for(; it != itEnd; ++it) 
{ 
    // Here *it references the element in the set (vector) 
    // Therefore, declare iterators to loop the vector and print it's elements. 
    std::vector<int>::const_iterator it2 = (*it).begin(); 
    std::vector<int>::const_iterator it2End = (*it).end(); 

    for (; it2 != it2End; ++it2) 
    std::cout << *it2; 
} 
0

、 C++ 11では、簡単です:

set< vector<int> > conjunto; 
// filling conjunto ... 
for (vector<int>& v: conjunto) 
    cout << v[0] << endl;