这对两个人来说都可以。然而,再多一点,它显然很快就会变得非常难看。实际上,如果您以“幼稚”的方式执行此操作,则需要进行n!
比较以检查何时有n
变量。
一种更简单的方法如下所示:
static constexpr Edge::number()
{
return <number_of_values>;
}
bool operator==(const Edge& e, const Edge& f)
{
constexpr size = Edge::number();
std::array<int, size> earr = {{e.p1, e.p2, ..., e.pn}};
std::array<int, size> farr = {{f.p1, f.p2, ..., f.pn}};
return std::is_permutation(earr.begin(), earr.end(), farr.begin());
}
如果它总是两个,你可以简单地写成:
bool operator==(const Edge& e, const Edge& f)
{
std::array<int, 2> earr = {{e.p1, e.p2};
std::array<int, 2> farr = {{f.p1, f.p2}};
return std::is_permutation(earr.begin(), earr.end(), farr.begin());
}
测试无序相等与测试一个序列是否是另一个序列的排列相同。
编辑:这对我来说应该很明显,可以通过检查排序序列是否相等来进行测试。在上面替换std::is_permutation
为std::sort
and std::equal
,这将O(n log n)
代替O(n^2)
.