在c ++中的向量集

时间:2011-01-11 03:11:44

标签: c++ vector set

如何获取向量集中的元素?这是我的代码:

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 个答案:

答案 0 :(得分:8)

[]运算符优先于*运算符,因此您希望将for循环更改为:

for (it = conjunto.begin(); it != conjunto.end(); it++)
    std::cout << (*it)[0] << std::endl;

答案 1 :(得分:3)

你很亲密。您需要将矢量拉出set迭代器。见下文。

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 :(得分:2)

现在,使用C ++ 11标准,它更容易:

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

答案 3 :(得分: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;
}