Make flatten() linear for ordered_json (#5834)
* Make flatten() linear for ordered_json Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Use priority_tag instead of a C-style variadic overload in add_flattened clang-tidy flags the ellipsis fallback (cert-dcl50-cpp, modernize-avoid-variadic-functions). Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
1 parent
a6e9785ab6
commit
0c4e7c103c
4 files changed
+129
-8
No files matched your search
@@ -143,6 +143,17 @@ public:
|
||||
return {std::prev(this->end()), true};
|
||||
}
|
||||
|
||||
/// @brief add an element at the end without checking whether the key exists
|
||||
/// @note The caller must guarantee that @a key is not yet contained, otherwise
|
||||
/// the container holds duplicate keys. This avoids the linear search of
|
||||
/// emplace() and operator[] when many keys known to be new are added.
|
||||
template<class V, detail::enable_if_t<
|
||||
detail::is_constructible<T, V>::value, int> = 0>
|
||||
void emplace_new_key(const key_type& key, V && t)
|
||||
{
|
||||
append(key, std::forward<V>(t));
|
||||
}
|
||||
|
||||
T& operator[](const key_type& key)
|
||||
{
|
||||
return emplace(key, T{}).first->second;
|
||||
|
||||
Reference in new issue
Block a user