• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <unordered_set>

    std::unordered_multiset::merge

    template<class H2, class P2>
      void merge(unordered_set<Key, H2, P2, Allocator>& source);       // (1)
    template<class H2, class P2>
      void merge(unordered_set<Key, H2, P2, Allocator>&& source);      // (2)
    template<class H2, class P2>
      void merge(unordered_multiset<Key, H2, P2, Allocator>& source);  // (3)
    template<class H2, class P2>
      void merge(unordered_multiset<Key, H2, P2, Allocator>&& source); // (4)
    

    概要

    引数 source 内の各要素を抽出し、*this のハッシュ関数とキー等価(equality)述語を使用して *this への挿入を試みる。 また、この操作で要素はコピーもムーブもされない。

    要件

    source.get_allocator() == (*this).get_allocator()

    戻り値

    なし

    計算量

    平均的なケースでは O(N)、最悪ケースでは O(N*size()+N)、ただし Nsource.size() である。

    備考

    source の転送された要素へのポインタおよび参照は、それらと同じ要素を参照するが、*this のメンバとして参照する。また、転送された要素を参照する反復子と*thisを参照するすべての反復子は無効になるが、 source に残っている要素への反復子は有効なままになる。

    #include <iostream>
    #include <unordered_set>
    
    int main()
    {
      std::unordered_multiset<int> s1 = { 10, 20, 30 };
      std::unordered_multiset<int> s2 = { 10 };
    
      // s1 の要素を s2 に merge
      s2.merge(s1);
    
      if (s1.size() != 0) std::cout << "s1 = { ";
      else std::cout << "s1 = {}\n";
    
      for(auto&& itr = s1.begin(); itr != s1.end();)
        std::cout << *itr << (++itr != s1.end() ? ", " : " }\n");
    
      if (s2.size() != 0) std::cout << "s2 = { ";
      else std::cout << "s2 = {}\n";
    
      for(auto&& itr = s2.begin(); itr != s2.end();)
        std::cout << *itr << (++itr != s2.end() ? ", " : " }\n");
    }
    

    出力

    s1 = {}
    s2 = { 10, 10, 20, 30 }
    

    バージョン

    言語

    • C++17

    処理系

    参照