std::map<Key,T,Compare,Allocator>:: insert_or_assign
|
template
<
class
M
>
std:: pair < iterator, bool > insert_or_assign ( const Key & k, M && obj ) ; |
(1) | (desde C++17) |
|
template
<
class
M
>
std:: pair < iterator, bool > insert_or_assign ( Key && k, M && obj ) ; |
(2) | (desde C++17) |
|
template
<
class
K,
class
M
>
std:: pair < iterator, bool > insert_or_assign ( K && k, M && obj ) ; |
(3) | (desde C++26) |
|
template
<
class
M
>
iterator insert_or_assign ( const_iterator hint, const Key & k, M && obj ) ; |
(4) | (desde C++17) |
|
template
<
class
M
>
iterator insert_or_assign ( const_iterator hint, Key && k, M && obj ) ; |
(5) | (desde C++17) |
|
template
<
class
K,
class
M
>
iterator insert_or_assign ( const_iterator hint, K && k, M && obj ) ; |
(6) | (desde C++26) |
mapped_type
correspondiente a la clave
k
. Si la clave no existe, inserta el nuevo valor como si mediante
insert
, construyéndolo a partir de
value_type
(
k,
std::
forward
<
M
>
(
obj
)
)
.
mapped_type
correspondiente a la clave
k
. Si la clave no existe, construye un objeto
u
de tipo
value_type
con
std::
forward
<
K
>
(
k
)
,
std::
forward
<
M
>
(
obj
)
)
, luego inserta
u
en
*
this
. Si
equal_range
(
u.
first
)
==
equal_range
(
k
)
es
false
, el comportamiento es indefinido. El
value_type
debe ser
EmplaceConstructible
en el
map
desde
std::
forward
<
K
>
(
k
)
,
std::
forward
<
M
>
(
obj
)
. Esta sobrecarga participa en la resolución de sobrecargas solo si
Compare
es
transparente
. Permite llamar a esta función sin construir una instancia de
Key
.
El comportamiento es indefinido (hasta C++20) El programa está mal formado (desde C++20) si std:: is_assignable_v < mapped_type & , M && > es false .
No se invalidan iteradores ni referencias.
Contenidos |
Parámetros
| k | - | la clave utilizada tanto para buscar como para insertar si no se encuentra |
| hint | - | iterador a la posición antes de la cual se insertará el nuevo elemento |
| obj | - | el valor a insertar o asignar |
Valor de retorno
Complejidad
emplace
.
emplace_hint
.
Notas
insert_or_assign
proporciona más información que
operator
[
]
y no requiere que el tipo mapeado sea default-constructible.
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_lib_map_try_emplace
|
201411L
|
(C++17) |
std::map::try_emplace
,
std::map::insert_or_assign
|
__cpp_lib_associative_heterogeneous_insertion
|
202311L
|
(C++26) | Sobrecargas heterogéneas para las funciones miembro restantes en contenedores asociativos ordenados y contenedores asociativos no ordenados . Sobrecargas ( 3 ) y ( 6 ) . |
Ejemplo
#include <iostream> #include <string> #include <map> void print_node(const auto& node) { std::cout << '[' << node.first << "] = " << node.second << '\n'; } void print_result(auto const& pair) { std::cout << (pair.second ? "inserted: " : "assigned: "); print_node(*pair.first); } int main() { std::map<std::string, std::string> myMap; print_result(myMap.insert_or_assign("a", "apple")); print_result(myMap.insert_or_assign("b", "banana")); print_result(myMap.insert_or_assign("c", "cherry")); print_result(myMap.insert_or_assign("c", "clementine")); for (const auto& node : myMap) print_node(node); }
Salida:
inserted: [a] = apple inserted: [b] = banana inserted: [c] = cherry assigned: [c] = clementine [a] = apple [b] = banana [c] = clementine
Véase también
|
acceder o insertar elemento especificado
(función miembro pública) |
|
|
acceder elemento especificado con verificación de límites
(función miembro pública) |
|
|
inserta elementos
o nodos
(desde C++17)
(función miembro pública) |
|
|
(C++11)
|
construye elemento in-situ
(función miembro pública) |