我创建了一个名为" worklist的4个元素的列表。"我有另一个名为" choicelist"其中有大约40个元素。我想检查" worklist"中是否有任何元素。出现在" choicelist"。
我知道我会使用" std :: find"从搜索,但我如何从"工作清单"检查每个元素IN ORDER? in" choicelist"?
记住,一旦来自"工作清单"已经在" choicelist"我希望搜索过程结束(最好是某些关于" worklist"中哪个元素是第一个匹配的通知)。
答案 0 :(得分:2)
你必须迭代第一个列表的元素,并使用find函数检查它是否在第二个列表中。如果它找到了搜索元素,则打印它并打破循环。
std::list<int> worklist;
std::list<int> choicelist;
//This loop only works in C++11 and above,
//in case of C++98, you need to use iterators to iterate over list
for( auto &x : worklist)
{
//auto is also a feature of C++11 and above
auto y = std::find (std::begin(choicelist),
std::end(choicelist), x);
if( y != choicelist.end())
{
std::cout<< *y<<"\n";
break;
}
}
如果您只需要在第二个容器中找到第一个容器的第一个元素,
auto y= std::find_first_of(std:begin(choicelist), std::end(choicelist),
std::begin(worklist), std::end(worklist));
if( y != choicelist.end())
{
std::cout<< *y<<"\n";
}