は人の体重をvector < pair <double, int> >
表し、その人のIDを表します。double
int
set < pair < double, int > >
次に、その人物に基づいて重複を削除するために変換する必要がありますid
が、ベクトル内には精度の低いデータがあります。
サンプルデータ:
-----------------------
double | int
-----------------------
10.234 | 1 <--
20.123 | 2
10.2 | 1 <--
30.33 | 3
ご覧のとおりid 1
、さまざまな精度の重みがあります。
デフォルトのコンパレーターを使用するstd::set
と、セットに 4 つの要素が含まれますが、必要なのは 3 つだけです。
セットには の要素が 1 つだけ存在するid 1
必要があります (2 つの競合他社の誰でも構いません)。
私が使用していない理由std::map
は、エントリを特定の順序にする必要があるためです。重量順に並べる必要があります。このため、次のコンパレータを使用しています。
struct comp__f {
bool operator() (const pair<double, int>& lhs, const pair<double, int>& rhs) const{
if(lhs.first < rhs.first) return true;
if(lhs.first > rhs.first) return false;
return lhs.second > rhs.second;
}
};
注:質問はまだ開いています.@Robᵩの答えは問題を完全には解決しませんが、彼の努力に感謝します.