c++ - set_intersection 用于两种不同类型的集合

标签 c++ stl set-intersection

有什么方法可以对两种不同类型的集合执行 std::set_intersection 吗?

我有两套:

std::set<X1> l_set1;
std::set<X2> l_set2;

我可以为它们定义一些比较器来检查 X1 和 X2 是否相等。

struct sample_comparer
{
    bool operator()(const &X1 p_left, const &X2 p_right)
    {
        return p_left == p_right;
    }
};

现在,我尝试对这两个集合进行集合交集:

std::set<X1> l_intersect;
std::set_intersection(l_set1.begin(), l_set1.end(), l_set2.begin(), l_set2.end(),
                      std::inserter(l_intersect, l_intersect.begin()), sample_comparer());

不幸的是,我无法强制此代码工作。我什至不确定这是否可能,但来自 description set_intersection 我知道我可以使用两个不同的迭代器。

我试图搜索一些代码示例来执行我​​想要的操作,但没有找到任何代码示例?有人可以为我的问题提供一个有效的代码示例吗?

更新: 错误是:

error: stl_function.h:227: no match for 'operator<' in '__x < __y'

提前致谢!

最佳答案

PlasmaHH 的评论可能是问题所在。

set_intersection 等函数的工作方式是它们首先执行:a < b然后 b < a

因此 ample_comparer 需要能够比较两种方式:

struct sample_comparer
{
    bool operator()(const &X1 p_left, const &X2 p_right)
    {
        return p_left == p_right;
    }
    bool operator()(const &X2 p_left, const &X1 p_right)
    {
        return p_left == p_right;
    }
};

以下实际上并没有做任何明智的事情——但它确实编译得很干净:

struct A
{
  struct Compare { bool operator () (A const &, A const &) { return false;}  };
};

struct B
{
  struct Compare { bool operator () (B const &, B const &) { return false; } };
};

typedef std::set<A, A::Compare> S1;
typedef std::set<B, B::Compare> S2;

class IntersectionCompare
{
public:
  bool operator ()(S1::value_type, S2::value_type) { return false; } 
  bool operator ()(S2::value_type, S1::value_type) { return false; } 
};

void bar (S1 & s1, S2 & s2)
{
  S1 result;
  std::set_intersection (s1.begin ()
      , s1.end ()
      , s2.begin ()
      , s2.end ()
      , std :: insert_iterator< S1 > (result, result.end ())
      , IntersectionCompare ());
}

关于c++ - set_intersection 用于两种不同类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172145/

相关文章:

c++ - 为什么 vector::erase() 不会使对已删除元素的引用无效?

c++ - 以下代码是否使用 std::set "legal"?

javascript - 范围的差异

c++ - 将外部 dll 项目用于 Excel 的 c++/xll 插件

c++ - macOS 中/proc 是否有替代方案?

c++ - 为什么我在链接期间得到 "undefined reference to ` glibtop_init'"?

python - 两个 numpy 索引数组相交

c++ - C++11 是否为 std::type_info 提供散列函数?

c++ - 如何从字符串末尾提取数字

python - 找到多组交集的最佳方法?