首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果元素相交的话,我试图循环将元素插入到集合中,但这并没有给我我想要的

如果元素相交的话,我试图循环将元素插入到集合中,但这并没有给我我想要的
EN

Stack Overflow用户
提问于 2022-10-08 03:12:51
回答 1查看 18关注 0票数 0

all和all2都是字符串集。在movie1中,所有的角色都是满的,而all2是空的。我的循环应该检查movie2中的参与者是否也在movie1中,然后他们是否要在all2中插入该参与者。然而,我的代码只是输出movie2中的所有参与者。

代码语言:javascript
复制
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持有格雷格·金尼,梅格·瑞安,帕克·波西,汤姆·汉克斯

我收到的输出是格雷格·金尼,梅格·瑞安,帕克·波西,汤姆·汉克斯。

应该只输出汤姆·汉克斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-08 03:23:06

与其编写循环,不如使用交叉点

代码语言:javascript
复制
#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";                            
}

输出:

代码语言:javascript
复制
Frank
Jack

由于std::set存储排序的名称,而std::set_intersection需要排序序列才能正确工作,所以使用std::set_intersection是一种现成的解决方案。

使用输入的实例化示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73994094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档