2013-09-28 39 views
-4

我需要从2d数组中分离值。我需要做的就是存储具有特定值的字段的所有索引。向量矢量,从数组中分离不同的值

例如,我可能有一个数组,其中有3个单元格,其值为1,10个字段的值为2. 我试图创建1个矢量,它存储值为1的所有索引,另一个存储值为2的所有索引。

这里是我一直想写一个代码,但它似乎没有工作坚持

无效searchForGrains(小区**标签,诠释_size){

storage.push_back(tab[0][0]); 
Point p(0,0); // Point refers to array indexes 
storage[0].points.push_back(p); 

for(int i=0 ; i<_size ; ++i){ 
    for(int j=0 ; j<_size ; ++j){ 
     int counter = 0; 

     for(unsigned int k=0 ; k<storage.size() ; k++){ 

      if(tab[i][j].value == storage[k].value){ 
       Point pp(i,j); 

       storage[k].points.push_back(pp); 
      } 
      else 
       counter++; 
     } 
      if(counter == storage.size()) 
       storage.push_back(tab[i][j]); 

    } 
} 

}

+2

恐怕我对你想要这段代码做什么的解释感到困惑。 “不起作用”的事情并没有告诉任何人。说出你的函数的输入是什么,你期望输出是什么,输出实际是什么。并尝试解释你所谈论的这些细胞和领域是什么。 – john

+0

对不起,我误删了一部分解释。所以作为输入我有一个数组(2d)。该数组的每个字段都有一个值。作为输出,我想获得所有的字段的索引,例如value = 1在一个向量中,所有其他向量中的值= 2的索引等等,所以基本上我想将每个值的所有索引存储在分离的向量中 – user2803017

+0

行了(我想)。接下来是涉及的变量的类型,例如你如何声明存储。 – john

回答

0

我认为这是一个非常简单的逻辑错误。问题是,当你找到一个新的值时,虽然你添加了一个新的条目到存储向量中,但是你不会添加找到新值的地方。除了你提出特例的0,0之外,你不需要这样做。试试这个代替

void searchForGrains(Cell **tab, int _size) 
{ 
    for(int i=0 ; i<_size ; ++i) 
    { 
     for(int j=0 ; j<_size ; ++j) 
     { 
      int counter = 0; 
      for(unsigned int k=0 ; k<storage.size() ; k++) 
      { 
       if(tab[i][j].value == storage[k].value) 
       { 
        Point pp(i,j); 
        storage[k].points.push_back(pp); 
       } 
       else 
        counter++; 
      } 
      if(counter == storage.size()) 
      { 
       storage.push_back(tab[i][j]); 
       Point pp(i,j); 
       storage[storage.size() - 1].points.push_back(pp); 
      } 
     } 
    } 
} 

毫无疑问,这可能会更有效,但我认为它的工作原理。