最終更新日時: 2026年02月17日 23時22分33秒 (JST)
Akira Takahashi が更新

履歴 編集

function template
<unordered_map>

# std::operator==(C++11)

    namespace std {
      template <class Key, class T, class Hash, class Pred, class Alloc>
      bool operator==(const unordered_multimap<Key,T,Hash,Pred,Alloc>& a,
                      const unordered_multimap<Key,T,Hash,Pred,Alloc>& b); // (1) C++11
      template <class Key, class T, class Hash, class Pred, class Alloc>
      constexpr bool operator==(const unordered_multimap<Key,T,Hash,Pred,Alloc>& a,
                      const unordered_multimap<Key,T,Hash,Pred,Alloc>& b); // (1) C++26
    }

## 概要

`unordered_multimap` オブジェクトを等値比較する。

## 要件

- `a.key_eq()` と `b.key_eq()` は同じふるまいをすること。
- `key_type` の等値比較演算子（`operator==`）で等値と判定された 2 つのオブジェクトは、`key_eq()` でも等値と判定されること。

## 戻り値

以下の両方を満たす場合 `true`、そうでない場合 `false`。

- `a.size() == b.size()` である。
- 一方のコンテナの全ての要素が、他方のコンテナにも存在する。ここで、存在するとは、`key_type` の等値比較演算子（`operator==`）で等値と判定されるということである。

## 例外

投げない。

## 計算量

Ei を `a` の `i` 番目の同値キーのグループの大きさ、`n = a.size()`であるとして、

- 平均: O(Σ(Ei2))
- 最悪: O(n2)

## 備考

- 本関数は、コンテナ内の要素の比較に `key_eq()` で返されるキー比較用関数オブジェクトを使用しないことに注意。
- 本関数は、標準コンテナの要件を満たさない。これは、標準コンテナの要件では `operator!=` が `iterator` と `std::equal` を用いて定義されているためである。しかし、本関数の戻り値は、両方のコンテナが同じ要素を保持しているという意味においては、標準コンテナと同様とも考えることができる。
- この演算子により、以下の演算子が使用可能になる (C++20)：
  - `operator!=`

## 例

    #include <iostream>
    #include <unordered_map>

    int main()
    {
      std::unordered_multimap<int,char> um1;
      um1.insert(std::make_pair(10,'a'));
      um1.insert(std::make_pair(20,'b'));
      um1.insert(std::make_pair(30,'c'));
      um1.insert(std::make_pair(30,'d'));

      std::unordered_multimap<int,char> um2;
      um2.insert(std::make_pair(30,'c'));
      um2.insert(std::make_pair(10,'a'));
      um2.insert(std::make_pair(30,'d'));
      um2.insert(std::make_pair(20,'b'));

      std::cout << (um1 == um2) << std::endl;

      um2.insert(std::make_pair(30,'e'));

      std::cout << (um1 == um2) << std::endl;

      return 0;
    }

### 出力

    1
    0

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: 2012 ✅

## 参照

- P0809R0 Comparing Unordered Containers
- P1614R2 The Mothership has Landed
  - C++20での三方比較演算子の追加と、関連する演算子の自動導出
- P3372R3 constexpr containers and adaptors