C++20中有assign_or_inserter/insert_or_assigner吗?
Is there assign_or_inserter/insert_or_assigner in C++20?
std::inserter 遇到的问题是,如果键已经存在,它调用 insert 为 map 是 noop。
有 std::map::insert_or_assign,但我找不到使用它的插入器。
C++20有这样的东西吗?
注意:我知道我可以从 SO/internet 的某处 c/p 它,我对 STL/boost 解决方案感兴趣,而不是从某处 c/p 实施。
没有,没有对应的插件使用insert_or_assign
。事实上,wording 明确表示只有 3 个这样的函数:
back_inserter, front_inserter, and inserter are three functions making the insert iterators out of a container.
C++20 标准库中没有具有 insert_or_assign
功能的插入迭代器
插入迭代器由 [insert.iterators], and it is particularly described in [insert.iterators]/1 管理,只有创建迭代器的函数
[...] back_inserter
, front_inserter
, and inserter
are three functions making the insert iterators out of a container. [...]
是back_inserter
、front_inserter
和inserter
,[back.inserter], [front.inserter] and [inserter]分别涵盖了returns、back_insert_iterator
、front_insert_iterator
和 insert_iterator
。
根据 [back.insert.iter.ops], [front.insert.iter.ops] and [insert.iter.ops],将 value
复制赋值给这些迭代器的效果就好像调用
// back_insert_iterator
container->push_back(value);
// front _insert_iterator
container->push_front(value);
// insert_iterator
container->insert(iter, value);
分别。即,这些插入迭代器中的 none 提供了 std::map
和 std::unordered_map
的 insert_or_assign
成员函数的效果(由 N4713 引入,没有提及关于 [insert.iterators]).
意义上的插入迭代器的任何内容
有一些障碍使其不太可能被标准化。
map::insert_or_assign
没有 value_type
(参考)参数,该参数在 insert
、push_front
和 push_back
中都很常见。请记住 operator=
只有一个参数,因此您必须构造一对以分配给您的代理。
最好转发key和value中的一个或两个,如何区分传const std::pair<const Key, Value> &
、std::pair<Key &&, const Value &>
等
只有 2 个标准容器具有 insert_or_assign
、map
和 unordered_map
。每个容器都有 insert
,所有序列容器都有 push_front
或 push_back
.
中的一个或两个。
std::inserter 遇到的问题是,如果键已经存在,它调用 insert 为 map 是 noop。 有 std::map::insert_or_assign,但我找不到使用它的插入器。
C++20有这样的东西吗?
注意:我知道我可以从 SO/internet 的某处 c/p 它,我对 STL/boost 解决方案感兴趣,而不是从某处 c/p 实施。
没有,没有对应的插件使用insert_or_assign
。事实上,wording 明确表示只有 3 个这样的函数:
back_inserter, front_inserter, and inserter are three functions making the insert iterators out of a container.
C++20 标准库中没有具有 insert_or_assign
功能的插入迭代器
插入迭代器由 [insert.iterators], and it is particularly described in [insert.iterators]/1 管理,只有创建迭代器的函数
[...]
back_inserter
,front_inserter
, andinserter
are three functions making the insert iterators out of a container. [...]
是back_inserter
、front_inserter
和inserter
,[back.inserter], [front.inserter] and [inserter]分别涵盖了returns、back_insert_iterator
、front_insert_iterator
和 insert_iterator
。
根据 [back.insert.iter.ops], [front.insert.iter.ops] and [insert.iter.ops],将 value
复制赋值给这些迭代器的效果就好像调用
// back_insert_iterator
container->push_back(value);
// front _insert_iterator
container->push_front(value);
// insert_iterator
container->insert(iter, value);
分别。即,这些插入迭代器中的 none 提供了 std::map
和 std::unordered_map
的 insert_or_assign
成员函数的效果(由 N4713 引入,没有提及关于 [insert.iterators]).
有一些障碍使其不太可能被标准化。
map::insert_or_assign
没有 value_type
(参考)参数,该参数在 insert
、push_front
和 push_back
中都很常见。请记住 operator=
只有一个参数,因此您必须构造一对以分配给您的代理。
最好转发key和value中的一个或两个,如何区分传const std::pair<const Key, Value> &
、std::pair<Key &&, const Value &>
等
只有 2 个标准容器具有 insert_or_assign
、map
和 unordered_map
。每个容器都有 insert
,所有序列容器都有 push_front
或 push_back
.