Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: insert_or_assign

From cppreference.net
template < class M >
std:: pair < iterator, bool > insert_or_assign ( const key_type & k, M && obj ) ;
(1) (depuis C++23)
template < class M >
std:: pair < iterator, bool > insert_or_assign ( key_type && k, M && obj ) ;
(2) (depuis C++23)
template < class K, class M >
std:: pair < iterator, bool > insert_or_assign ( K && k, M && obj ) ;
(3) (depuis C++23)
template < class M >
iterator insert_or_assign ( const_iterator hint, const key_type & k, M && obj ) ;
(4) (depuis C++23)
template < class M >
iterator insert_or_assign ( const_iterator hint, key_type && k, M && obj ) ;
(5) (depuis C++23)
template < class K, class M >
iterator insert_or_assign ( const_iterator hint, K && k, M && obj ) ;
(6) (depuis C++23)
1,2) Si une clé équivalente à k existe déjà dans le conteneur, assigne std:: forward < M > ( obj ) au mapped_type correspondant à la clé k . Si la clé n'existe pas, insère la nouvelle valeur comme par
Le programme est mal formé si soit std:: is_assignable_v < mapped_type & , M > ou std:: is_constructible_v < mapped_type, M > est false .
3,6) Si une clé équivalente à k existe déjà dans le conteneur, assigne std:: forward < M > ( obj ) au mapped_type correspondant à la clé k . Sinon, équivalent à
La conversion de k vers key_type doit construire un objet u pour lequel find ( k ) == find ( u ) est true . Sinon, le comportement est indéfini.
Ces surcharges participent à la résolution de surcharge seulement si :

Table des matières

Paramètres

k - la clé utilisée à la fois pour la recherche et pour l'insertion si non trouvée
hint - itérateur vers la position avant laquelle le nouvel élément sera inséré
obj - la valeur à insérer ou assigner

Valeur de retour

1-3) Le composant bool est true si l'insertion a eu lieu et false si l'assignation a eu lieu. Le composant itérateur pointe vers l'élément qui a été inséré ou mis à jour.
4-6) Itérateur pointant vers l'élément qui a été inséré ou mis à jour.

Complexité

1-3) Identique à emplace .
4-6) Identique à emplace_hint .

Notes

insert_or_assign fournit plus d'informations que operator [ ] et ne nécessite pas la constructibilité par défaut du type mappé.

Exemple

#include <flat_map>
#include <iostream>
#include <string>
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::flat_map<std::string, std::string> map;
    print_result(map.insert_or_assign("a", "apple"));
    print_result(map.insert_or_assign("b", "banana"));
    print_result(map.insert_or_assign("c", "cherry"));
    print_result(map.insert_or_assign("c", "clementine"));
    for (const auto& node : map)
        print_node(node);
}

Sortie :

inserted: [a] = apple
inserted: [b] = banana
inserted: [c] = cherry
assigned: [c] = clementine
[a] = apple
[b] = banana
[c] = clementine

Voir aussi

accéder ou insérer l'élément spécifié
(fonction membre publique)
accéder à l'élément spécifié avec vérification des limites
(fonction membre publique)
insère des éléments
(fonction membre publique)
construit l'élément en place
(fonction membre publique)
insère en place si la clé n'existe pas, ne fait rien si la clé existe
(fonction membre publique)