C++ 查找与多个向量中的值对应的索引

C++ 查找与多个向量中的值对应的索引,c++,C++,我有4个向量v1,v2,v3和v4 我想找到k,使得v1[k]==a1,v2[k]==a2,v3[k]==a3和v4[k]==a4(其中a1,a2,a3,a4是已知值)。在这种情况下,这样一个k保证存在并且是唯一的 我可以编写一系列for循环(在一个列表中找到索引,然后检查下一个列表中的那些索引等等,直到剩下的只有一个索引),但是C++中有内置的方法来做这个吗?如果有什么不同,我对k的值不感兴趣,我只想从每个列表中删除第k个条目。您可以使用Boost和从Boost执行此操作: const aut

我有4个向量v1,v2,v3和v4

我想找到k,使得v1[k]==a1,v2[k]==a2,v3[k]==a3和v4[k]==a4(其中a1,a2,a3,a4是已知值)。在这种情况下,这样一个k保证存在并且是唯一的

我可以编写一系列for循环(在一个列表中找到索引,然后检查下一个列表中的那些索引等等,直到剩下的只有一个索引),但是C++中有内置的方法来做这个吗?如果有什么不同,我对k的值不感兴趣,我只想从每个列表中删除第k个条目。

您可以使用Boost和从Boost执行此操作:

const auto iter_first = boost::make_zip_iterator(v1.begin(), v2.begin(), v3.begin(), v4.begin());
const auto iter_last = boost::make_zip_iterator(v1.end(), v2.end(), v3.end(), v4.end());
const auto iter_k = std::find(iter_first, iter_last, boost::make_tuple(a1, a2, a3, a4));
v1.erase(iter_k.get_iterator_tuple().get<0>());
v2.erase(iter_k.get_iterator_tuple().get<1>());
v3.erase(iter_k.get_iterator_tuple().get<2>());
v4.erase(iter_k.get_iterator_tuple().get<3>());
const auto iter_first=boost::make_zip_迭代器(v1.begin()、v2.begin()、v3.begin()、v4.begin());
const auto iter_last=boost::make_zip_迭代器(v1.end(),v2.end(),v3.end(),v4.end());
const auto iter_k=std::find(iter_第一,iter_最后,boost::make_tuple(a1,a2,a3,a4));
v1.erase(iter_k.get_iterator_tuple().get());
v2.erase(iter_k.get_迭代器_tuple().get());
v3.erase(iter_k.get_iterator_tuple().get());
擦除(iter_k.get_iterator_tuple().get());
STL中还没有
zip_迭代器(甚至在新的ranges库中也没有)


我想你也可以通过
zip\u视图
from而不是Boost来做同样的事情。

注意:只需要一个
for
for(k=0,;…){\\if(v1[k]!=a1)continue;\\if(v2[k]!=a2)continue;…
循环就可以找到
k
for(k=0,;){\\code>for(k=0,;){\\if(v1[k]!=a1)continue;\\if(v2[k]!=a2)continue;
==a2&&v3[k]==a3&&v4[k]==a4)返回k;
-一旦一个条件(从左到右)为
false,短路评估将停止比较。