all和all2都是字符串集。在movie1中,所有的角色都是满的,而all2是空的。我的循环应该检查movie2中的参与者是否也在movie1中,然后他们是否要在all2中插入该参与者。然而,我的代码只是输出movie2中的所有参与者。
all = imdb.find_actors_in_a_movie(matchedMovie1);
for (auto i = actors_in_movie2.begin(); i != actors_in_movie2.end(); i++)
{
if (all.count(*m) > 0)
{
all2.insert(*m);
}
} 所有人都拥有克里斯托弗·沃尔肯,莱昂纳多·DiCaprio,马丁·辛,汤姆·汉克斯
actors_in_movie2持有格雷格·金尼,梅格·瑞安,帕克·波西,汤姆·汉克斯
我收到的输出是格雷格·金尼,梅格·瑞安,帕克·波西,汤姆·汉克斯。
应该只输出汤姆·汉克斯。
发布于 2022-10-08 03:23:06
与其编写循环,不如使用交叉点。
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::set<std::string> all = {"Joe", "Jack", "Mary", "Frank"};
std::set<std::string> actors_in_movie2 = {"James", "Jack", "Philip", "Frank"};
std::set<std::string> all2;
std::set_intersection(actors_in_movie2.begin(),
actors_in_movie2.end(),
all.begin(),
all.end(),
std::inserter(all2, all2.end()));
for (auto& n : all2)
std::cout << n << "\n";
}输出:
Frank
Jack由于std::set存储排序的名称,而std::set_intersection需要排序序列才能正确工作,所以使用std::set_intersection是一种现成的解决方案。
https://stackoverflow.com/questions/73994094
复制相似问题