C++:如何在包含用户定义结构的两个向量上使用 set_intersection?

C++: How to use set_intersection on two vectors containing user-defined structs?

我有两个非常简单的充满结构的向量:

typedef struct{
    //three vertex ids
    uint a,b,c;

} Face;

我目前正在尝试 运行 set_intersection 像这样:

set_intersection(listOfFaces1.begin(),listOfFaces1.end(),listOfFaces2.begin(),listOfFaces2.end(), back_inserter(facesToDelete));

我猜我需要以某种方式覆盖一些比较器?但是我不确定如何定义两个 Face 对象之间的相等性...

如有任何帮助,我们将不胜感激。

首先,当你用C++编程时,你可以使用:

struct Face {
    uint a,b,c;
};

这是一个简单的实施策略 operator<,适用于标准库中的算法和容器。

struct Face {
    uint a,b,c;

    bool operator<(Face const& rhs) const
    {
       if ( a != rhs.a )
       {
          return ( a < rhs.a);
       }
       if ( b != rhs.b )
       {
          return ( b < rhs.b);
       }
       return ( c < rhs.c);
    }
};

或者,按照@Praetorian 的建议,

struct Face {
    uint a,b,c;

    bool operator<(Face const& rhs) const
    {
       return std::tie(a, b, c) < std::tie(rhs.a, rhs.b, rhs.c); 
    }
};