Set of vectors in C ++

How can I get elements in a vector set? This is the code I have:

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] ;
+3
source share
4 answers

You're close You need to pull the vector from the given iterator. See below.

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

Conclusion:

$ ./a.out 
0
size = 2
0
1
+3
source

An operator []takes precedence over an operator *, so you want to change the loop forto:

for (it = conjunto.begin(); it != conjunto.end(); it++)
    std::cout << (*it)[0] << std::endl;
+7
source
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 elements.
   std::vector<int>::const_iterator it2 = (*it).begin();
   std::vector<int>::const_iterator it2End = (*it).end();

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

Now, with the C ++ 11 standard, this is simpler:

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

Source: https://habr.com/ru/post/1784647/


All Articles