【问题标题】:Check for empty intersection in STL检查 STL 中的空交叉点
【发布时间】:2012-10-08 01:51:10
【问题描述】:

如何检查两个std::sets 的空交集?我可以使用set_intersection,但这太慢了,我只需要bool 回答。

备注:std::set 表示有序集合,它们属于同一类型等。

【问题讨论】:

标签: c++ stl set


【解决方案1】:

自己编码有什么问题吗?

bool empty_intersection(const set<int>& x, const set<int>& y)
{
    std<int>::const_iterator i = x.begin();
    std<int>::const_iterator j = y.begin();
    while (i != x.end() && j != y.end())
    {
      if (*i == *j)
        return false;
      else if (*i < *j)
        ++i;
      else
        ++j;
    }
    return true;
}

反正就是这样。完全未经测试的代码。

【讨论】:

  • 我只使用迭代器 2 天,我很高兴能够做我能做的事情。
  • 好的,上面的算法和 set_intersection 使用的算法类似,只是如果它找到一个共同的元素,它会立即返回 false。显然,它依赖于集合已排序的事实,因此如果您仅在每次循环循环时递增较低值的迭代器,您将找到所有公共元素。
  • 非常感谢。我想我可以阅读这篇文章,只是我自己无法编写这样的代码。
  • 您可以进行一项细微的更改以删除对operator== 的要求:if(*i&lt;*j) ++i; else if(*j&lt;*i) ++j; else return false;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多