私はセットを使用しています。私はカスタム構造体をキーとして使用します。私は値を挿入して、挿入された値を見つけようとしています。しかし、要素を見つけることは決してないようです。C++ std :: set Find関数オーバーロード==演算子
==演算子と<演算子の両方をオーバーライドしました。ここで
は、構造体のコードです:
struct distance_t
{
public:
int id;
double distance;
bool operator<(const distance_t& rhs) const
{
if(distance < rhs.distance)
return true;
else
return false;
}
bool operator==(const distance_t& rhs)
{
if(id == rhs.id)
return true;
else
return false;
}
};
そして、これはそれが常にassert文に失敗した主な
int main()
{
set<distance_t> currentSet;
distance_t insertDistance;
insertDistance.id =1;
insertDistance.distance = 0.5;
currentSet.insert(insertDistance);
distance_t findDistance;
findDistance.id = 1;
assert(currentSet.find(findDistance) != currentSet.end());
}
のコードです。私は間違って何をしていますか?
編集 - 今、私は==演算子を全く使用しないことを理解しています。ここに私が欲しいものがあります。データ構造を距離順に並べる必要があります。しかし、私はIDを使用してそれを削除することができるはずです。これを行うためのクリーンな方法や既存のデータ構造はありますか?
スタイル提案: 'if(expr)return true;それ以外の場合はfalseを返します。 'return expr;'を単に行うことができます。 – Blastfurnace
'return id
@Blastfurnace括弧は必要ありません。 –