如何在指针中保存向量元素的详细信息?

时间:2017-05-17 05:42:37

标签: c++ pointers vector

我试图比较2个二维向量,这两个向量在每52行中包含10个单元。我试图比较前5行作为参考,然后比较所有其他行与这5行,然后最重要的是保存所有信息(参考ID和单元格的位置),确切地找到参考单元格的哪个单元格类似于每一行的细胞。不能在参考单元中找到的细胞应该按原样打印。这就是我的尝试:

int main(){
    vector <vector<string>> reference_one_cell;   /*stored all the cells of 5 reference lines */
    vector < vector<string> > input_array;    /*stored all the cells all 52  lines  */

                  /*comparison part*/   

          std::set<std::string> stringSet;
          for ( auto const& vs : reference_one_cell)
          for ( auto const& item : vs )
           stringSet.insert(item);

                 for (int f=0;f<52;f++){
                  for (int g=0;g<10;g++){

                    bool found = any_of(stringSet.begin(),
                                 stringSet.end(),
                                  [=](std::string const& item){return input_array[f][g] == item;});
                     if ( found )
                     {

                        outputFile << ",";
                     }
                     else
                     {

                        outputFile<<input_array[f][g];
                     }
                  }

               }

  }     

我能够打印出参考线中找到的细胞“,”。但是如果使用指针来存储所有细节信息(参考ID和参考线中的位置),我真的可以坚持几天,我可以回到再次原始状况。提前谢谢

1 个答案:

答案 0 :(得分:1)

  1. 添加变量以跟踪找到匹配项的reference_one_cell索引。

    std::vector<std::pair<std::size_t, std::size_t>> indices;
    
  2. 确保在找到匹配项后更新indices的内容。

  3. 在最外层循环结束后使用indices

  4. int main(){
    
       ... 
    
       // Variable to keep track of matching indices.
       std::vector<std::pair<std::size_t, std::size_t>> indices;
    
       ...
    
       for (int f=0;f<52;f++){
          for (int g=0;g<10;g++){
    
             bool found = any_of(stringSet.begin(),
                                 stringSet.end(),
                                 [=](std::string const& item){return input_array[f][g] == item;});
             if ( found )
             {
                // Use more elaborate but explicit code.
                // indices.push_back(std::pair<std::size_t, std::size_t>{f, g});
    
                // Or use succinct but not so explicit code.
                indices.push_back({f, g});
    
                outputFile << ",";
             }
             else
             {
                outputFile<<input_array[f][g];
             }
          }
       }
    
       // Use indices
    
       ...
    }