2011-01-11 53 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;