Comment puis-je obtenir toutes les clés uniques dans un multimap
J'ai un multi-table et je veux obtenir toutes les clés uniques dans il être stocké dans un vecteur.
multimap<char,int> mymm;
multimap<char,int>::iterator it;
char c;
mymm.insert(pair<char,int>('x',50));
mymm.insert(pair<char,int>('y',100));
mymm.insert(pair<char,int>('y',150));
mymm.insert(pair<char,int>('y',200));
mymm.insert(pair<char,int>('z',250));
mymm.insert(pair<char,int>('z',300));
Comment puis-je faire cela? il est possible de compter le nombre d'éléments avec une clé, mais aucun pour compter le nombre de clés uniques dans une multimap.
Ajouté: uniques, je veux dire toutes les clés en multimap fois elles peuvent être répétées ou se produire une fois dans multimap.
Unique clés ici sont - xy et z
source d'informationauteur AJ. | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
J'ai essayé et cela a fonctionné
Depuis les entrées d'un
std::multimap<>
sont implicitement triés et sortir dans l'ordre de tri lors de l'itération à travers eux, vous pouvez utiliser lestd::unique_copy
algorithme pour cela:Le travail supplémentaire ajoutée par ce est linéaire en le nombre d'entrées de la multimap, tandis que l'utilisation d'un
std::set
ou Jeeva de l'approche pour la déduplication à la fois ajouter O(n log n) étapes de calcul.Remarque: L'expression lambda-je utiliser n'assume C++11. Il est possible de réécrire ce pour C++03.
Itérer sur tous les éléments de
mymm
et de stockerit->first
dans unset<char>
.Je pense que vous pouvez faire quelque chose comme ceci dans le cas par
unique
vous voulez dire que la clé est contenue dans lemultimap
qu'une seule fois:1) construire une triés
list
de toutes les clés de votre carte2) parcourir la liste pour trouver des clés uniques. C'est simple, puisque tous les doublons seront proches les uns des autres dans une triés contenant
Si vous voulez juste toutes les clés - utiliser
std::set
comme Donotalo suggéréfaçon la plus simple serait de mettre les clés de multimap dans un unordered_set