Je veux créer std :: map en STL, mais le comparateur dépend d'une valeur dynamique qui n'est disponible qu'au moment de l'exécution. Comment puis-je faire cela? Par exemple, je veux quelque chose ressemble à std::map<int, int, Comp(value1, value2)>
. valeur1 et valeur2 ne sont pas le nombre comparé ici, ils sont une sorte de numéros de configuration.Puis-je créer une carte avec un comparateur dynamique dynamique?
1
A
Répondre
9
Utilisez un functor class:
#include <map>
class Comp
{
public:
Comp(int x, int y) : x(x), y(y) {}
bool operator() (int a, int b) const { /* Comparison logic goes here */ }
private:
const int x, y;
};
int main()
{
std::map<int,float,Comp> m(Comp(value1,value2));
}
Cela ressemble à une fonction, mais sous la forme d'un objet d'exécution. Cela signifie qu'il peut avoir un état, ce qui inclut la configuration d'exécution. Tout ce que vous avez à faire est de surcharger operator()
. Si vous définissez tous les corps de fonctions membres dans la définition de classe (comme ci-dessus), alors le compilateur va probablement tout mettre en ligne, donc il y aura un surcoût de performance négligeable.
Si vous connaissez value1
et value2
à la compilation (si elles sont constantes de compilation), vous pouvez utiliser un modèle de fonction à la place:
template <int x, int y>
bool compare(int a, int b) { /* Comparison logic goes here */ }
int main()
{
std::map<int,float,compare<value1,value2> > m;
}
Questions connexes
- 1. Comment créer un contenu dynamique avec une navigation dynamique?
- 2. Créer un rapport dynamique
- 3. Créer une vue dynamique avec Android
- 4. Comment créer une requête dynamique avec SubSonic
- 5. Coloriage dynamique d'une carte US avec Javascript
- 6. Comment créer un UIImageView dynamique
- 7. créer un contrôle dynamique asp.net
- 8. Comment créer un formulaire dynamique?
- 9. Comment créer une table dynamique?
- 10. Comment créer une propriété dynamique
- 11. Comment créer une liste générique avec un type d'objet dynamique
- 12. Comment créer un ASP dynamique: ImageMap
- 13. Comment créer une image-image dynamique-interactive avec jQuery?
- 14. Comment créer un comparateur avec Boost?
- 15. wpf créer dynamique "cliquable"
- 16. Comment créer dynamique datalist
- 17. Comment ajouter une carte Google dynamique à mon site?
- 18. Comment créer un Regex .NET avec un quantificateur dynamique
- 19. Puis-je créer un ListView avec un GroupItemCount dynamique?
- 20. Comment créer une méthode dynamique en PHP?
- 21. gestion de carte dynamique dans google earth
- 22. Créer une div dynamique en Javascript
- 23. Comment créer une chaîne de modèles dynamique
- 24. Comment créer un menu dynamique dans Symfony
- 25. comment valider des éléments de carte dynamique
- 26. Comment créer un CSS dynamique dans Rails?
- 27. Créer un lien dynamique dans drupal
- 28. STL std :: carte de commande dynamique
- 29. Créer une page HTML dynamique dans asp.net
- 30. Boucle pour créer une chaîne SQL dynamique
Le code est correct, mais vous n » t vraiment souligner _why_ un foncteur est la solution. Si vous instanciez la carte avec le funtor _type_, vous pouvez (au moment de l'exécution) passer un functor _object_ au constructeur de la carte. – MSalters
@MSalters: Fair point. J'ai mis à jour ma réponse légèrement. –