J'utilise Boost Unorded_map. J'ai une paire de valeur clé pour chaque entrée. Comment puis-je déterminer si une valeur particulière existe sur la carte? (Je ne veux pas créer un autre ONUORDED_MAP qui stocké la valeur en tant que clé et clé que la valeur) p>
merci. p>
3 Réponses :
Vous devez itérer sur tous les éléments du Le unomment_map code> et voyez si la valeur donnée existe. P>
std :: recherche_if code> algorithme avec un prédicat personnalisé peut être utilisé pour simplifier cela. P>
Prédicat personnalisé? Tout ce dont vous avez besoin est déjà dans STL. compose1 (bind2nd (égale_to
@Efement: Ce n'est ni simple ni lisible. (Aussi, select2nd code>, tandis que la partie de la STL, ne fait pas partie de la bibliothèque standard C ++)
@Efement: C'est l'une des pires utilisations de la STL que j'ai jamais vue.
Boost a le BIMAP , qui est une carte bidirectionnelle (c.-à-d. Les clés et les valeurs qui se rapportent les unes aux autres). Cela semble plus approprié à vos besoins que le Unorded_map code>. P>
Ne veut pas dire qu'ils ne veulent pas une carte inverse? Bien qu'ils ne justifient pas pourquoi.
Les petits enfants ne veulent pas un voyage au dentiste, mais la bonne parentalité le fait de toute façon.
@Efement: Je pense que l'OP ne veut pas avoir à maintenir une structure de données distincte (plus probable). Par conséquent, si cela vient tous emballés, je ne vois pas pourquoi il y aurait un problème (puisque l'égalité est définie de toute façon pour valeur code>).
Que diriez-vous de ce qui suit: ou à l'aide d'une variable externe capturée: p>
Merci pour votre réponse. Pour l'expression de la Lambda, comment puis-je passer l'argument dans si le retour VT.Second == "ABC" dans lequel "ABC" est un argument qui doit être transmis?
J'ai mis à jour l'exemple ci-dessus. En bref, vous capturez la variable de la portée dans laquelle la Lambda est définie.
Nice réponse, requiert C ++ 0x (ou des extensions à C ++ 03).