120 votes

std::map valeur par défaut

Est-il un moyen de spécifier la valeur par défaut std::maps' operator[] revient lorsqu'une clé n'existe pas?

11voto

Mike Seymour Points 130519

La norme C++ (23.3.1.2) spécifie que le nouvellement inséré valeur par défaut est construit, afin map lui-même ne fournit pas un moyen de le faire. Vos choix sont:

  • Donner le type de la valeur par défaut constructeur qui initialise à la valeur que vous voulez, ou
  • Envelopper la carte dans votre propre classe qui fournit une valeur par défaut et met en oeuvre operator[] pour l'insertion de ce défaut.

6voto

Michael Anderson Points 21181

Il n'y a aucun moyen de spécifier la valeur par défaut - c'est toujours la valeur construite par la valeur par défaut (zéro paramètre du constructeur).

En fait, operator[] ne doute plus que ce que vous pensez que si une valeur n'existe pas pour la clé donnée dans la carte, il va insérer une nouvelle avec la valeur par défaut du constructeur.

5voto

Thomas Eding Points 8651
template<typename T, T X>
struct Default {
    Default () : val(T(X)) {}
    Default (T const & val) : val(val) {}
    operator T & () { return val; }
    operator T const & () const { return val; }
    T val;
};

<...>

std::map<KeyType, Default<ValueType, DefaultValue> > mapping;

1voto

VDVLeon Points 797

Peut-être vous pouvez donner un allocateur personnalisé, qui attribuent une valeur par défaut que vous souhaitez.

template < class Key, class T, class Compare = less<Key>,
       class Allocator = allocator<pair<const Key,T> > > class map;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X