方法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ではラムダ式を使用しています。適宜、自身の要件に合わせて選択してください。