- flat_map[meta header]
- std[meta namespace]
- flat_map[meta class]
- function template[meta id-type]
- cpp23[meta cpp]
template <class... Args>
pair<iterator, bool> emplace(Args&&... args);
- pair[link /reference/utility/pair.md]
コンテナに新しい要素を挿入する。要素は直接構築される(コピーもムーブもされない)。要素のコンストラクタはこの関数に渡された引数を与えることによって呼ばれる。
args...
: 要素のコンストラクタへ転送される引数パック。
is_constructible_v
<
pair
<key_type, mapped_type>, Arg...>
がtrue
であること
pair
<key_type, mapped_type>
型の変数t
をstd::forward
<Args>(args)...
で初期化する。このコンテナがt.first
と等価なキーをすでにもっている場合、*this
を変更しない。そうでない場合、以下と等価:
auto key_it = ranges::upper_bound(c.keys, t.first, compare);
auto value_it = c.values.begin() + distance(c.keys.begin(), key_it);
c.keys.insert(key_it, std::move(t.first));
c.values.insert(value_it, std::move(t.second));
- c.keys[link containers.md]
- c.values[link containers.md]
- ranges::upper_bound[link /reference/algorithm/ranges_upper_bound.md]
- begin()[link /reference/vector/vector/begin.md]
- distance[link /reference/iterator/distance.md]
- insert[link /reference/vector/vector/insert.md]
- std::move[link /reference/utility/move.md]
挿入されたかどうかを示す bool
と、挿入された要素へのイテレータからなる pair
を返す。挿入されなかったときは、既存要素へのイテレータを返す。
#include <iostream>
#include <flat_map>
int main()
{
std::flat_map<int, char> fm;
// キーと値のpairを作ることなく挿入できる
fm.emplace(3, 'A'); // キー3と、値'A'を挿入
fm.emplace(1, 'B');
fm.emplace(4, 'C');
for (const auto& [key, value] : fm) {
std::cout << key << " : " << value << std::endl;
}
}
- emplace[color ff0000]
1 : B
3 : A
4 : C
#include <iostream>
#include <flat_map>
#include <string>
#include <tuple>
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) {}
};
int main()
{
stdx::flat_map<std::string, Point> fm;
fm.emplace(std::piecewise_construct,
std::forward_as_tuple(3, 'C'), // キーの型std::stringのコンストラクタ引数を渡す
std::forward_as_tuple(1, 2)); // 値の型Pointのコンストラクタ引数を渡す
fm.emplace(std::piecewise_construct,
std::forward_as_tuple(3, 'A'),
std::forward_as_tuple(3, 4));
fm.emplace(std::piecewise_construct,
std::forward_as_tuple(3, 'B'),
std::forward_as_tuple(5, 6));
for (const auto& [key, value] : fm) {
std::cout << key << " : (" << value.x << ", " << value.y << ')' << std::endl;
}
}
- emplace[color ff0000]
- std::piecewise_construct[link /reference/utility/piecewise_construct_t.md]
- std::forward_as_tuple[link /reference/tuple/forward_as_tuple.md]
AAA : (3, 4)
BBB : (5, 6)
CCC : (1, 2)
- C++23
- Clang: ??
- GCC: ??
- Visual C++: ??
名前 | 説明 |
---|---|
flat_map::insert |
要素を挿入する |
flat_map::insert_range |
Rangeを挿入する |
flat_map::insert_or_assign |
要素を挿入、あるいは代入する |
flat_map::emplace_hint |
ヒントを使って要素を直接構築する |
flat_map::try_emplace |
キーが存在しない場合のみ要素を直接構築する |