我正在使用集合。我使用一個自定義結構作爲關鍵。我插入一個值並試圖找到插入的值。但似乎從未找到這個元素。C++ std :: set查找函數重載==運算符
我已經覆蓋了==運算符和<運算符。
這裏是結構的代碼:
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;
}
};
這是主要
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你也不需要括號。 –