[libcxx-commits] [PATCH] D62779: [2/2] Fix complexity of map insert_or_assign with a hint.
Mark de Wever via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Sep 16 11:17:21 PDT 2020
Mordante marked an inline comment as done.
Mordante added inline comments.
================
Comment at: libcxx/include/map:1274
+ {
+ return __tree_.__insert_or_assign_hint(__h.__i_, __k, _VSTD::forward<_Vp>(__v));
+ }
----------------
ldionne wrote:
> I think it would be better if `__emplace_hint_unique_key_args` returned a pair of `bool` and `iterator`, like `__emplace_unique_key_args` does. We could then reuse it to implement this functionality. WDYT?
I think it could work something like:
```
auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(
__h.__i_, __k, _VSTD::move(__k), _VSTD::forward<_Vp>(__v));
if (!__inserted)
__r->__get_value().second = _VSTD::forward<_Vp>(__v);
return __r;
```
I'm not fond of using `__k` and moving it in the same function call, but `try_emplace(key_type&& __k, _Args&&... __args)` uses the same method for the key. Since it's safe here and I see no reason why it would become unsafe in the future I don't mind.
I like that this approach keeps the header file smaller so I'll test this approach further.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62779/new/
https://reviews.llvm.org/D62779
More information about the libcxx-commits
mailing list