[英]std::unordered_map - operator != and user defined value
這是一個示例代碼:
struct T
{
int x;
int y;
bool operator !=(const T& t) const
{
return std::tie(x, y) != std::tie(t.x, t.y);
}
};
int main()
{
std::unordered_map<int, T> m1;
std::unordered_map<int, T> m2;
if (m1 != m2) //compilation error
{
}
}
我需要將operator!=
用於無序映射。 代碼無法編譯,因為沒有找到operator==
。 我可以這樣修復它:
bool operator ==(const T& t) const
{
return std::tie(x, y) == std::tie(t.x, t.y);
}
然后以這種方式比較地圖:
if(!(m1 == m2))
它是最佳解決方案還是可以直接使用operator!=
?
比較std::unordered_map
的要求是鍵類型為 EqualityComparable。 這意味着T
必須能夠計算表達式a == b
其中a,b
都是T
類型。
如果您只想比較這些映射的相等性,則應改為定義==
運算符。
如果你想同時使用這兩個運算符,我建議像你展示的那樣根據==
定義!=
,但你也可以反過來做。
請注意,在 C++20 中,您只需要定義operator ==
,反operator !=
將為您定義。
有關更多詳細信息,請參閱https://en.cppreference.com/w/cpp/container/unordered_map/operator_cmp和https://en.cppreference.com/w/cpp/named_req/EqualityComparable 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.