2016-12-28 1 views
-2
std::multimap<int,std::string> mymap; 
mymap.emplace(1, "hello "); 
mymap.emplace(1, "world!"); 
std::cout << mymap.size() << "\n"; 

Est-ce que cet écho 1 ou 2? Par exemple, puis-je utiliser emplace pour ajouter de nouvelles paires à un multimap, sans affecter les paires plus anciennes avec la même clé?Est-ce que std :: multimap :: emplace remplace les anciennes clés?

+0

La documentation de 'std :: multimap :: emplace'] (http://en.cppreference.com/w/cpp/container/multimap/emplace) semble assez claire sur son plan d'action. La phrase d'ouverture, "Insère un nouvel élément dans le conteneur construit sur place avec les arguments donnés" laisse peu à l'imagination, et diffère de celle de ['std :: map :: emplace'] (http: // en. cppreference.com/w/cpp/container/map/emplace) dans l'absence de tout qualificatif d'élément antérieur. – WhozCraig

+0

En outre, la question - qu'est-ce que 'cout' produira ?, quand vous pouvez facilement le vérifier vous-même, est assez étrange ... – zoska

Répondre

0

En essayant sur http://cpp.sh/ cette sorties 2, emplace ne remplace pas les anciennes paires avec la même clé.

0

Meilleur à vérifier par vous-même. De la définition std::multimap permet d'avoir la même clé pour différentes valeurs, std::map ne le fait pas. La sortie est: 2, donc il est permis d'avoir 2 valeurs différentes sous la même clé en multimap.

IdeONE: https://ideone.com/eRkBmV

0

De [associative.reqmts]/4 (accent mien):

Un conteneur associatif prend en charge les clés uniques si elle peut contenir au plus un élément pour chaque clé. Sinon, il prend en charge les clés équivalentes. Les classes set et map supportent des clés uniques; les classes multiset et multimap prennent en charge les clés équivalentes. Pour multiset et multimap, insérer, emplace et effacer préserver l'ordre relatif des éléments équivalents

En fait, le point de l'ensemble de multimap est de pouvoir stocker plusieurs éléments avec la même clé, par opposition à map.

+0

Je pense que la question résulte d'une mauvaise compréhension de ce que' emplace' signifie dans ce cas. Je pense que OP ne réalise pas que 'emplace' est vraiment' insert' mais avec la sémantique C++ 11. – zoska