namespace std {
// operator==により、以下の演算子が使用可能になる (C++20)
template <class Key, class T, class Hash, class Pred, class Alloc>
bool operator!=(const unordered_map<Key,T,Hash,Pred,Alloc>& a,
const unordered_map<Key,T,Hash,Pred,Alloc>& b); // (1) C++11
}
概要
unordered_map
オブジェクトを非等値比較する。
要件
a.key_eq()
とb.key_eq()
は同じふるまいをすること。key_type
の等値比較演算子(operator==
)で等値と判定された 2 つのオブジェクトは、key_eq()
でも等値と判定されること。
戻り値
以下と等価:
return !(a == b);
例外
投げない。
計算量
備考
- 本関数は、コンテナ内の要素の比較に
key_eq()
で返されるキー比較用関数オブジェクトを使用しないことに注意。 - 本関数は、標準コンテナの要件を満たさない。これは、標準コンテナの要件では
operator!=
がiterator
とstd::equal
を用いて定義されているためである。しかし、本関数の戻り値は、両方のコンテナが同じ要素を保持しているという意味においては、標準コンテナと同様とも考えることができる。
例
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_map<int,char> um1;
um1[0] = 'a';
auto um2 = um1;
std::cout << (um1 != um2) << std::endl;
um2[0] = 'b';
std::cout << (um1 != um2) << std::endl;
return 0;
}
出力
0
1
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: 2012 ✅
参照
- P0809R0 Comparing Unordered Containers
- P1614R2 The Mothership has Landed
- C++20での三方比較演算子の追加と、関連する演算子の自動導出