比较两对整数的最有效方法

dee*_*pak 0 c++ c++11

一个类包含两个整数; 这个类有两个实例.我想比较它们以确保两个实例包含相同的两个数字(它们的顺序无关紧要).

我可以做这个:

bool operator==(const Edge &e, const Edge &f) {
    return ((e.p1 == f.p1) || (e.p1 == f.p2)) && ((e.p2 == f.p1) || (e.p2 == f.p2));
}
Run Code Online (Sandbox Code Playgroud)

这是最好的方式吗?会有很多这样的比较,所以我想确保我做出最有效的选择.顺便说一句,运营商将主要由std::unordered_set班级使用 - 如果这些信息很重要.

Die*_*Epp 9

我认为你的逻辑混淆了......如果我理解正确,给定对(a,b)和(x,y),你想检查(a,b)== s(x,y) ,对于一些排列s?

bool operator==(const Edge &e, const Edge &f) {
    return ((e.p1 == f.p1) && (e.p2 == f.p2)) ||
           ((e.p2 == f.p1) && (e.p1 == f.p2));
}
Run Code Online (Sandbox Code Playgroud)

至于性能......这里没有什么可以优化的.如果您的程序很慢,请去其他地方看看.