簡體   English   中英

std::unordered_map - 運算符 != 和用戶定義的值

[英]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_cmphttps://en.cppreference.com/w/cpp/named_req/EqualityComparable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM