std::map<any, string>
ne fonctionne pas, donc je me demande s'il y a une autre approche à ont des touches arbritaires?Est-il possible d'utiliser boost.any comme une clé dans une carte std :: map (ou quelque chose de similaire)?
Répondre
Je pense que le problème n'est pas avec Boost::Any
, mais plutôt avec le fait que vous ne spécifiez pas de comparateur personnalisé. Puisque map
est un conteneur associatif trié, vous devez avoir un comparateur.
Les œuvres suivantes pour moi: l'adapter selon vos besoins:
#include <iostream>
#include <map>
#include <boost/any.hpp>
using namespace std;
struct cmp {
bool operator()(const boost::any& l, const boost::any& r) {
try
{
int left = boost::any_cast<int>(l);
int right = boost::any_cast<int>(r);
return left < right;
}
catch(const boost::bad_any_cast &)
{
return false;
}
return false;
}
};
int main() {
map<boost::any, string, cmp> ma;
boost::any to_append = 42;
ma.insert(std::make_pair(to_append, "int"));
if (ma.find(42) != ma.end()) {
cout << "hurray!\n";
}
return 0;
}
Votre foncteur de comparaison n'est pas valide pour une utilisation dans une carte car il peut renvoyer false pour a
Un exemple serait bien. Quoi qu'il en soit, je pense que d'autres cas peuvent être construits là où le comparateur échouera. L'idée même d'avoir une commande à travers les types ne me semble pas bonne. – dirkgently
Un exemple serait n'importe quelle paire où un (a) contient et int et l'autre (b) contient une chaîne. Votre comparateur retournera false pour a
Vous voudrez peut-être regarder boost::variant
plutôt que boost::any
, de sorte que vous pouvez être sûr que tous les types que vous utilisez sont comparables.
L'utilisation de visiteurs serait le meilleur moyen de fournir un opérateur de comparaison pour variant
s.
- 1. Dernière clé d'un fichier std :: map
- 2. Est-ce que python a quelque chose comme C++ utilisant un mot-clé?
- 3. composant ImageGrid ou quelque chose comme ça
- 4. Comment montrer quelque chose de similaire à une alerte comme SO fait ici avec javascript?
- 5. Comment faire une superposition d'image en HTML (quelque chose comme un marqueur sur Google Map)?
- 6. types personnalisés comme la clé pour une carte - C++
- 7. Je cherche quelque chose de similaire à AdRotator dans .NET
- 8. Y a-t-il quelque chose de similaire à "Ajouter une référence de service" dans XCode?
- 9. carte à l'aide contenant défini comme une valeur
- 10. yahoo-pipes ou plugin ou quelque chose ...
- 11. Quelque chose comme SciPy dans Ruby?
- 12. marqueurs multiples sur une carte Google Map
- 13. Comment emballer un int [,] avec quelque chose comme une ReadOnlyCollection?
- 14. recherche d'interface pour quelque chose comme Appendable ou OutputStream
- 15. C++ vecteur littéraux, ou quelque chose comme eux
- 16. Quelque chose comme Crystal Reports pour PHP?
- 17. C++ carte STL :: effacer une clé
- 18. Portage de std :: map vers C?
- 19. Erreur d'exécution std :: map inhabituelle
- 20. je dois correspondre à une police d'un designer à quelque chose de similaire pour le web
- 21. Y a-t-il un Subversion Checkout Hook ou quelque chose de similaire?
- 22. enveloppant une application MFC Gui dans une DLL (ou quelque chose d'autre) pour .NET interop
- 23. Bogue bizarre lors de l'insertion dans C++ std :: map
- 24. Structures imbriquées dans une classe modèle avec std :: map :: const_iterator?
- 25. Commander comme une liste mais l'accès par une clé?
- 26. Quelle est la différence entre déclarer comme nouveau et comme quelque chose = quelque chose de nouveau dans vb.net?
- 27. Comment obtenir quelque chose de similaire au type de données SERIAL PG dans SQL Server 2008?
- 28. Tri d'un fichier std :: map avant valeur et destruction
- 29. Structure de données similaire à une carte à 2 arguments
- 30. Comment puis-je détecter la dernière itération dans une boucle sur std :: map?
Que voulez-vous faire? – Skurmedel
Où est la touche any? – Artelius
comment puis-je poster des paramètres de template ins stackoverflow? – DaVinci