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);
}
};
我有两个非常简单的充满结构的向量:
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);
}
};