我试图比较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和参考线中的位置),我真的可以坚持几天,我可以回到再次原始状况。提前谢谢
答案 0 :(得分:1)
添加变量以跟踪找到匹配项的reference_one_cell
索引。
std::vector<std::pair<std::size_t, std::size_t>> indices;
确保在找到匹配项后更新indices
的内容。
在最外层循环结束后使用indices
。
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
...
}