Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::unordered_map<Key,T,Hash,KeyEqual,Allocator>::insert_or_assign

      From cppreference.com
      <cpp‎ |container‎ |unordered map

      [edit template]
       
       
       
      std::unordered_map
      Member types
      Member functions
      Non-member functions
      Deduction guides(C++17)
       
      template<class M>
      std::pair<iterator,bool> insert_or_assign(const Key& k, M&& obj);
      (1)(since C++17)
      template<class M>
      std::pair<iterator,bool> insert_or_assign( Key&& k, M&& obj);
      (2)(since C++17)
      template<class K,class M>
      std::pair<iterator,bool> insert_or_assign( K&& k, M&& obj);
      (3)(since C++26)
      template<class M>
      iterator insert_or_assign( const_iterator hint,const Key& k, M&& obj);
      (4)(since C++17)
      template<class M>
      iterator insert_or_assign( const_iterator hint, Key&& k, M&& obj);
      (5)(since C++17)
      template<class K,class M>
      iterator insert_or_assign( const_iterator hint, K&& k, M&& obj);
      (6)(since C++26)
      1,4) If a key equivalent tok already exists in the container, assignsstd::forward<M>(obj) to themapped_type corresponding to the keyk. If the key does not exist, inserts the new value as if byinsert, constructing it fromvalue_type(k,std::forward<M>(obj)).
      2,5) Same as(1,4), except the mapped value is constructed fromvalue_type(std::move(k),std::forward<M>(obj)).
      3,6) If a key equivalent tok already exists in the container, assignsstd::forward<M>(obj) to themapped_type corresponding to the keyk. If the key does not exist, constructs an objectu ofvalue_type withstd::forward<K>(k),std::forward<M>(obj)), then insertsu into*this. Ifhash_function()(u.first)!= hash_function()(k)|| contains(u.first) istrue, the behavior is undefined. Thevalue_type must beEmplaceConstructible intounordered_map fromstd::forward<K>(k),std::forward<M>(obj). This overload participates in overload resolution only ifHash andKeyEqual are bothtransparent. This assumes that suchHash is callable with bothK andKey type, and that theKeyEqual is transparent, which, together, allows calling this function without constructing an instance ofKey.

      The behavior is undefined(until C++20)The program is ill-formed(since C++20) ifstd::is_assignable_v<mapped_type&, M&&> isfalse.

      If after the operation the new number of elements is greater than oldmax_load_factor() * bucket_count() a rehashing takes place.
      If rehashing occurs (due to the insertion), all iterators are invalidated. Otherwise (no rehashing), iterators are not invalidated.

      Contents

      [edit]Parameters

      k - the key used both to look up and to insert if not found
      hint - iterator to the position before which the new element will be inserted
      obj - the value to insert or assign

      [edit]Return value

      1-3) Thebool component istrue if the insertion took place andfalse if the assignment took place. The iterator component is pointing at the element that was inserted or updated.
      4-6) Iterator pointing at the element that was inserted or updated.

      [edit]Complexity

      1-3) Same as foremplace.
      4-6) Same as foremplace_hint.

      [edit]Notes

      insert_or_assign returns more information thanoperator[] and does not require default-constructibility of the mapped type.

      Feature-test macroValueStdFeature
      __cpp_lib_unordered_map_try_emplace201411L(C++17)std::unordered_map::try_emplace,
      std::unordered_map::insert_or_assign
      __cpp_lib_associative_heterogeneous_insertion202311L(C++26)Heterogeneous overloads for the remaining member functions inordered andunordered associativecontainers. Overloads(3) and(6).

      [edit]Example

      Run this code
      #include <iostream>#include <string>#include <unordered_map> void print_node(constauto& node){std::cout<<'['<< node.first<<"] = "<< node.second<<'\n';} void print_result(autoconst& pair){std::cout<<(pair.second?"inserted: ":"assigned: ");    print_node(*pair.first);} int main(){std::unordered_map<std::string,std::string> myMap;     print_result(myMap.insert_or_assign("a","apple"));    print_result(myMap.insert_or_assign("b","banana"));    print_result(myMap.insert_or_assign("c","cherry"));    print_result(myMap.insert_or_assign("c","clementine")); for(constauto& node: myMap)        print_node(node);}

      Possible output:

      inserted: [a] = appleinserted: [b] = bananainserted: [c] = cherryassigned: [c] = clementine[c] = clementine[a] = apple[b] = banana

      [edit]See also

      access or insert specified element
      (public member function)[edit]
      access specified element with bounds checking
      (public member function)[edit]
      inserts elementsor nodes(since C++17)
      (public member function)[edit]
      constructs element in-place
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/unordered_map/insert_or_assign&oldid=135903"

      [8]ページ先頭

      ©2009-2025 Movatter.jp