首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从两个地图创建一个set_difference矢量

从两个地图创建一个set_difference矢量
EN

Stack Overflow用户
提问于 2019-06-06 02:49:05
回答 2查看 279关注 0票数 3

目前,我正在获取两个映射的集合差异,然后迭代结果映射。

理想情况下,我想创建一个差异的向量,而不是地图。这样我就可以更高效地迭代。

typedef std::map<int, Info> RegistrationMap;

RegistrationMap redundantRegs;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(), 
std::inserter(redundantRegs, redundantRegs.begin()),
    [](const std::pair<int, Info> &p1, const std::pair<int, Info> &p2 {return p1.first < p2.first;});

for (auto reg : redundantRegs)
{
    map2[hiu.first].Status = "delete";
}

您将如何创建设置差的向量呢?这可以在set_difference函数中完成吗?

我正在寻找最有效的方法来获得差异。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-06 02:59:27

std::set_difference可以将其输出写入任何输出迭代器,因此将输出写入向量是没有问题的:

std::vector<std::pair<int, Info>> redundantRegs;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(),
                    std::back_inserter(redundantRegs),
                    ...);

(注意:在比较器中,将std::pair<int, Info>更改为std::pair<const int, Info>,以避免不必要的副本。)

票数 3
EN

Stack Overflow用户

发布于 2019-06-06 03:09:52

您可以使用std::set_difference,但最好使用std::back_inserter而不是std::inserter,因为这在std::vector上是最有效的,并相应地创建std::vector

std::vector<RegistrationMap::value_type> redundantRegs;;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(), 
                    std::back_inserter(redundantRegs) );

注意:在你编写它的方式中,你不需要显式地编写比较器,默认的比较器就可以很好地工作。如果不使用默认条件,则最好使用std::map::value_comp()std::map获取,而不是显式编写,因为map和std::set_difference的排序条件必须匹配

std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(), 
                    std::back_inserter(redundantRegs),
                    map1.value_comp() );

Live example

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

https://stackoverflow.com/questions/56466369

复制
相关文章

相似问题

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