0

クラスには 2 つの整数が含まれます。このクラスには 2 つのインスタンスがあります。それらを比較して、2 つのインスタンスに同じ 2 つの数値が含まれていることを確認します (順序は関係ありません)。

私がすることができます:

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));
}

これが最善の方法ですか?そのような比較はたくさんあるので、最も効率的な選択を確実に行いたいと思います。std::unordered_setところで、この情報が重要な場合に備えて、演算子は主にクラスによって使用されます。

4

4 に答える 4

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));
}

パフォーマンスに関しては...ここで最適化するものは何もありません。プログラムが遅い場合は、別の場所を探してください。

于 2013-05-17T04:27:11.233 に答える
4

これはおそらく最速ではなく、C++11 が必要です。しかし、それは素晴らしく短いです:

bool operator==(const Edge& e, const Edge& f) {
  return std::minmax(e.p1, e.p2) == std::minmax(f.p1, f.p2);
}

また、最適化 (私が通常使用するもの) も提案してp1p2ますminmax。次に、最適なソリューションがあります。

于 2013-05-17T05:04:34.157 に答える
0

あなたの質問に対する私の理解によると、次の解決策をお勧めします。

以下のようにクラスに関数を追加するだけです:

bool isExist(int point)
{
  if(this.p1==point || this.p2==point)
    return true;
  else
   return false;
}

この関数を呼び出してロジックを適用できます。

間違っていたら訂正お願いします...

于 2013-05-17T04:33:00.543 に答える