operator==,!=(std::unordered_multimap)
From cppreference.com
< cpp | container | unordered multimap
| template< class Key, class T, class Hash, class KeyEqual, class Alloc > bool operator==( const std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& lhs, |
(1) | |
| template< class Key, class T, class Hash, class KeyEqual, class Alloc > bool operator!=( const std::unordered_multimap<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。
[編集] 計算量
平均ケースでは、value_type に対する operator==、key_eq から返される述語、および hash_function から返されるハッシュ関数への呼び出し回数に比例します。ここで、S は i 番目の同値キーグループのサイズです。最悪ケースでは、コンテナのサイズを N としたときに N2 に比例します。各同値キーグループ内の要素が同じ順序で配置されている場合(コンテナがお互いのコピーである場合に発生)、平均ケースは N に比例します。