0

我正在寻找检查两个向量是否相交的最佳方法。

一个嵌套循环,如

for (auto const & first: first_vector)
  for (auto const & next: next_vector)
    if first == next
      return false;

可以完成这项工作,但它看起来不像 Boost.Test-ish 方式。看一下Boost.Test都没有太大帮助,因为唯一预定义的测试用例是BOOST_CHECK_EQUAL_COLLECTIONS

更新

BOOST_FIXTURE_TEST_CASE(paths,fixture_t)
{
  for(int i=0,j=vids.size(); i!=j; i++)
  {
    for(int p=0,q=vids.size(); p!=q; p++)
    {
      if (i == p)
      {
        continue;
      }
      if (i < p)
      {
        BOOST_TEST_CONTEXT("Equal match at positions " << i << " and " << p)

        BOOST_TEST(vids[i] != vids[p]);
      }
    }
  }
}
4

1 回答 1

4

在单元测试中,只要合理,您通常不关心验证代码的性能。

我只想编写一个模板函数sets_intersect,采用两个向量,将其中一个插入std::hash_set并遍历第二个向量,直到第一个匹配。或者只是对它们进行排序并使用std::set_intersection.

最终的语法类似于BOOST_CHECK(sets_intersect(vec1, vec2)),看起来对人类很友好。

于 2017-06-12T13:42:19.410 回答