Namespaces
Variants

std::map<Key,T,Compare,Allocator>:: merge

From cppreference.net

template < class C2 >
void merge ( std:: map < Key, T, C2, Allocator > & source ) ;
(1) (depuis C++17)
(constexpr depuis C++26)
template < class C2 >
void merge ( std:: map < Key, T, C2, Allocator > && source ) ;
(2) (depuis C++17)
(constexpr depuis C++26)
template < class C2 >
void merge ( std:: multimap < Key, T, C2, Allocator > & source ) ;
(3) (depuis C++17)
(constexpr depuis C++26)
template < class C2 >
void merge ( std:: multimap < Key, T, C2, Allocator > && source ) ;
(4) (depuis C++17)
(constexpr depuis C++26)

Tente d'extraire («splicer») chaque élément dans source et de l'insérer dans * this en utilisant l'objet de comparaison de * this . S'il existe un élément dans * this avec une clé équivalente à la clé d'un élément de source , alors cet élément n'est pas extrait de source . Si get_allocator ( ) == source. get_allocator ( ) est false , le comportement est indéfini.

Aucun élément n'est copié ou déplacé, seuls les pointeurs internes des nœuds du conteneur sont redirigés. Tous les pointeurs et références vers les éléments transférés restent valides, mais se réfèrent désormais à * this , et non à source .

Table des matières

Paramètres

source - conteneur compatible pour transférer les nœuds depuis

Exceptions

Ne lance pas sauf si la comparaison lance.

Complexité

Soit S comme size ( ) et N comme source. size ( ) :

1-4) S·log(S+N)

Exemple

#include <iostream>
#include <map>
#include <string>
int main()
{
    std::map<int, std::string> ma{{1, "apple"}, {5, "pear"}, {10, "banana"}};
    std::map<int, std::string> mb{{2, "zorro"}, {4, "batman"}, {5, "X"}, {8, "alpaca"}};
    std::map<int, std::string> u;
    u.merge(ma);
    std::cout << "ma.size(): " << ma.size() << '\n';
    u.merge(mb);
    std::cout << "mb.size(): " << mb.size() << '\n';
    std::cout << "mb.at(5): " << mb.at(5) << '\n';
    for (const auto& kv : u)
        std::cout << kv.first << ", " << kv.second << '\n';
}

Sortie :

ma.size(): 0
mb.size(): 1
mb.at(5): X
1, apple
2, zorro
4, batman
5, pear
8, alpaca
10, banana

Voir aussi

(C++17)
extrait les nœuds du conteneur
(fonction membre publique)
insère des éléments ou des nœuds (depuis C++17)
(fonction membre publique)