operator==,!= (std::unordered_map)
From cppreference.com
| template< class Key, class T, class Hash, class KeyEqual, class Alloc > bool operator==( const std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& lhs, |
(1) | |
| template< class Key, class T, class Hash, class KeyEqual, class Alloc > bool operator!=( const std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& lhs, |
(2) | (C++20まで) |
2つの順序なしコンテナの内容を比較します。
2つの順序なしコンテナ lhs と rhs の内容は、次の条件が満たされる場合に等しいとみなされます。
- lhs.size() == rhs.size().
- lhs.equal_range(lhs_eq1) から得られる同値な要素の各グループ
[lhs_eq1,lhs_eq2)には、もう一方のコンテナにおける、rhs.equal_range(rhs_eq1) から得られる対応する同値な要素のグループ[rhs_eq1,rhs_eq2)が存在し、以下のプロパティを持ちます。
- std::distance(lhs_eq1, lhs_eq2) == std::distance(rhs_eq1, rhs_eq2).
- std::is_permutation(lhs_eq1, lhs_eq2, rhs_eq1) == true.
Key または T が EqualityComparable でない場合、動作は未定義です。
hash_function() と key_eq() が(C++20まで)key_eq() が(C++20以降) lhs と rhs で同じ動作をしない場合、または Key に対する operator== が key_eq() によって導入された同値キーグループへの分割の洗練でない場合(つまり、operator== を使用して比較して等しい要素が異なるパーティションに属する場合)、動作は未定義です。
|
|
(C++20以降) |
[編集] パラメータ
| lhs, rhs | - | 比較する順序なしコンテナ |
[編集] 戻り値
1) コンテナの内容が等しい場合は true、そうでない場合は false。
2) コンテナの内容が等しくない場合は true、そうでない場合は false。
[編集] 計算量
平均ケースでは、コンテナのサイズを N とすると、value_type に対する operator== の呼び出し、key_eq が返す述語の呼び出し、および hash_function が返すハッシュ関数の呼び出しに比例します。最悪ケースでは N2 に比例します。