[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