Набор векторов в с ++ - PullRequest
       4

Набор векторов в с ++

6 голосов
/ 11 января 2011

Как я могу получить элементы в наборе векторов? Вот код, который у меня есть:

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

Ответы [ 4 ]

8 голосов
/ 11 января 2011

Оператор [] имеет приоритет над оператором *, поэтому вы хотите изменить цикл for на:

for (it = conjunto.begin(); it != conjunto.end(); it++)
    std::cout << (*it)[0] << std::endl;
3 голосов
/ 11 января 2011

Ты рядом.Вам нужно вытащить вектор из заданного итератора.См. Ниже.

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
2 голосов
/ 14 апреля 2017

Теперь, со стандартом C ++ 11, стало проще:

set< vector<int> > conjunto;
// filling conjunto ...
for (vector<int>& v: conjunto)
    cout << v[0] << endl;
1 голос
/ 11 января 2011
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...