gpt4 book ai didi

c++ - 是否可以使用 `std::set_intersection` 来检查两个集合是否有任何共同元素?

转载 作者:可可西里 更新时间:2023-11-01 18:24:58 50 4
gpt4 key购买 nike

std::set_intersection允许我通过将元素输出到 输出迭代器 来检索两个 std::set 实例之间的所有共同元素。在我的特定情况下,我只对检查两个集合是否有任何共同元素感兴趣。

我目前的解决方案是使用 boost::function_output_iterator设置一个 bool 变量如下:

bool b{false};
set_intersection(begin(s0), end(s0),
begin(s1), end(s1),
make_function_output_iterator([&](const auto&){ b = true; }));
return b;

不幸的是,如果找到匹配项,此解决方案不会提前返回:必须完全遍历集合(即没有提前返回/短路)

是否可以将 set_intersection 用于提前返回? 我能想到的唯一解决方案是从 function_output_iterator 中抛出异常 函数对象,这是个糟糕的主意。

如果没有,标准库中是否还有其他可以帮助我的东西,或者我是否被迫重新实现 set_intersection?奖励问题:如果 set_intersection 的接口(interface)允许提前终止(即标准库算法可能具有的“最通用”接口(interface)是什么),它会是什么样子??

最佳答案

好吧,“被迫”重新实现 std::set_intersection 并不是一件坏事。 只有五行代码:

template <class I1, class I2>
bool have_common_element(I1 first1, I1 last1, I2 first2, I2 last2) {
while (first1 != last1 && first2 != last2) {
if (*first1 < *first2)
++first1;
else if (*first2 < *first1)
++first2;
else
return true;
}
return false;
}

好的,超过 5 行。但是无痛。

关于c++ - 是否可以使用 `std::set_intersection` 来检查两个集合是否有任何共同元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770028/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com