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_­inserterfront_­inserterinserter[back.inserter], [front.inserter] and [inserter]分别涵盖了returns、back_insert_iteratorfront_insert_iteratorinsert_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::mapstd::unordered_mapinsert_or_assign 成员函数的效果(由 N4713 引入,没有提及关于 [insert.iterators]).

意义上的插入迭代器的任何内容

有一些障碍使其不太可能被标准化。

map::insert_or_assign 没有 value_type(参考)参数,该参数在 insertpush_frontpush_back 中都很常见。请记住 operator= 只有一个参数,因此您必须构造一对以分配给您的代理。

最好转发key和value中的一个或两个,如何区分传const std::pair<const Key, Value> &std::pair<Key &&, const Value &>

只有 2 个标准容器具有 insert_or_assignmapunordered_map。每个容器都有 insert,所有序列容器都有 push_frontpush_back.

中的一个或两个。