7
votes

Trouver si une carte est un sous-ensemble d'un autre

J'ai deux cartes STL std :: map foo = {{1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}}; et std :: map bar = {{2, 0}, {4, 0}, {5, 0}}; / code>

Je veux trouver si la barre est un sous-ensemble de FOO.

Étant donné que les éléments sont triés sur la carte, je penserais Pour trouver le premier élément de la barre de FOO, puis trouvez des éléments consécutifs du bar à foo de cet endroit.

Le problème ici est que je ne suis pas capable de trouver un moyen de le faire avec des cartes STL au CPP. Puis-je réduire la plage de recherche sur la carte pour chaque trouvaille d'un emplacement sur carte à la fin de la carte?

J'espère que j'ai expliqué le problème.


6 commentaires

Si ceux-ci sont des cartes, énumérez-vous les clés? Ou les types de valeur? Ou sont-ils ensembles?


Votre carte ressemble à set


Désolé pour la confusion. Ce sont des clés, la carte est la "carte ". Je suis intéressé à trouver si la deuxième carte a des clés sous réserve de clés dans la première carte.


@ H2CO3 - J'ai abandonné celui-ci. Apparemment, "STL" est maintenant pour la bibliothèque standard.


@Petebecker peut-être que je vais abandonner une journée aussi (mais pas encore!)


@ H2CO3: Nitpicking absurde ... STL est un terme bien connu et il n'est pas utilisé de manière incorrecte ici. Ce n'est pas comme s'il avait appelé std :: iostream stl.


3 Réponses :


3
votes

Vous pouvez extraire des ensembles de clés ( SET1 et SET2 ) des deux cartes ( FOO et bar ), Et tant qu'ils sont triés, vous pouvez procéder comme suit: xxx

voir std :: Comprend .


1 commentaires

Pourquoi extraire les clés? Vous pouvez le faire à la volée, voir ma réponse.



2
votes

Un moyen simple consiste à utiliser boost. Gamme en combinaison avec boost :: Comprend : xxx

Voici comment un programme complet complet pourrait ressembler (les valeurs mappées sont ignorées): xxx

voici un live Exemple .


0 commentaires

9
votes

Utilisez std :: Comprend algorithme avec un comparateur personnalisé qui se compare Seules les clés: xxx


0 commentaires