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

履歴 編集

function template
<flat_map>

std::flat_map::insert_or_assign(C++23)

template<class M>
pair<iterator, bool>
  insert_or_assign(const key_type& k,
                   M&& obj);            // (1) C++23

template<class M>
pair<iterator, bool>
  insert_or_assign(key_type&& k,
                   M&& obj);            // (2) C++23

template<class K, class M>
pair<iterator, bool>
  insert_or_assign(K&& k,
                   M&& obj);            // (3) C++23

template<class M>
iterator
  insert_or_assign(const_iterator hint,
                   const key_type& k,
                   M&& obj);            // (4) C++23

template<class M>
iterator
  insert_or_assign(const_iterator hint,
                   key_type&& k,
                   M&& obj);            // (5) C++23

template<class K, class M>
iterator
  insert_or_assign(const_iterator hint,
                   K&& k,
                   M&& obj);            // (6) C++23

概要

引数 k で指定されたキーが存在しなければ対応する値を引数 obj の値として要素を挿入し(insert)、さもなければ(or)、そのキーに対応する値に引数 obj を代入する(assign)。

引数 hint は、k を検索する際のヒントに使用される。

  • (1) : key_type型のキーをとって挿入もしくは代入する
  • (2) : key_type型の一時オブジェクトのキーをとって挿入もしくは代入する
  • (3) : key_typeに変換可能な型のキーをとって挿入もしくは代入する
  • (4) : 挿入位置のヒントをともない、key_type型のキーをとって挿入もしくは代入する
  • (5) : 挿入位置のヒントをともない、key_type型の一時オブジェクトのキーをとって挿入もしくは代入する
  • (6) : 挿入位置のヒントをともない、key_typeに変換可能な型のキーをとって挿入もしくは代入する

テンプレートパラメータ制約

なお、規格に記載はないが、hintemplace_hint と同様、コンテナの有効な読み取り専用イテレータである必要があるものと思われる。

事前条件

  • (3), (6) :
    • key_typeに変換したkuとして、find(k) == find(u)trueであること

効果

戻り値

  • (1)、(2)、(3) : イテレータと bool 値の pair を返す。
    • 挿入された場合には、first に挿入された要素へのイテレータ、secondtrue が設定される。
    • 代入された場合には、first に代入された要素へのイテレータ、secondfalse が設定される。
  • (4)、(5)、(6) :
    • 挿入された場合には、挿入された要素へのイテレータを返す。
    • 代入された場合には、代入された要素へのイテレータを返す。

計算量

#include <iostream>
#include <flat_map>
#include <string>

int main()
{
  std::flat_map<std::string, int> fm;

  auto [it1, b1] = fm.insert_or_assign("foo", 42);
  std::cout << '(' << it1->first << ", " << it1->second << "), " << std::boolalpha << b1 << '\n';

  auto [it2, b2] = fm.insert_or_assign("foo", 0);
  std::cout << '(' << it2->first << ", " << it2->second << "), " << std::boolalpha << b2 << '\n';
}

出力

(foo, 42), true
(foo, 0), false

バージョン

言語

  • C++23

処理系

関連項目

名前 説明
flat_map::insert 要素を挿入する
flat_map::insert_range Rangeを挿入する
flat_map::emplace 要素を直接構築する
flat_map::emplace_hint ヒントを使って要素を直接構築する
flat_map::try_emplace キーが存在しない場合のみ要素を直接構築する