C++におけるペア間の距離を基準にしたソート方法


方法1: 自作の距離関数を使用する方法 まず、ソートするペアのデータ構造を定義します。以下は、xとyの2つの要素を持つペアの例です。

struct Pair {
    int x;
    int y;
};

次に、2つのペア間の距離を計算するための距離関数を定義します。ここでは、ユークリッド距離を使用します。

#include <cmath>
double calculateDistance(const Pair& p1, const Pair& p2) {
    int dx = p1.x - p2.x;
    int dy = p1.y - p2.y;
    return std::sqrt(dx * dx + dy * dy);
}

最後に、距離関数を使用してペアのベクターをソートするコードを示します。

#include <vector>
#include <algorithm>
bool comparePairs(const Pair& p1, const Pair& p2) {
    // p1とp2の距離を計算して比較する
    double distance1 = calculateDistance(p1, p2);
    double distance2 = calculateDistance(p2, p1);
    return distance1 < distance2;
}
int main() {
    std::vector<Pair> pairs = /* ペアのベクターを初期化する */;

    std::sort(pairs.begin(), pairs.end(), comparePairs);

    // ソートされたペアの処理
    // ...

    return 0;
}

方法2: ラムダ式を使用する方法 C++11以降では、ラムダ式を使用して簡潔にソート関数を定義することもできます。以下は、方法1のコードをラムダ式を使って書き直したものです。

std::sort(pairs.begin(), pairs.end(), [](const Pair& p1, const Pair& p2) {
    double distance1 = calculateDistance(p1, p2);
    double distance2 = calculateDistance(p2, p1);
    return distance1 < distance2;
});

以上が、C++におけるペア間の距離を基準にしたソート方法の例です。方法1では自作の距離関数を使用し、方法2ではラムダ式を使用しています。適宜、自身の要件に合わせて選択してください。