int main()
{
std::map<std::string, int, std::less<std::string> > age;
age["Fred"] = 42; // Fred is 42 years old
std::cout << "Fred is " << age["Fred"] << " years old\n";
}
Seulement,map n'associe que key à val et ne permet pas d'utiliser
plusieurs dimensions.
Y a t-il une fonction de librarie standard qui permette de faire du genre
age["Europe"]["France"]["Fred"] = 42;
par exemple ?
Sachant que le nombre de niveaux maximum n'est connu qu'à l'exécution.
-- vmime, une bibliothèque C++ sous licence GPL pour parser et générer des messages au format MIME : http://www.sourceforge.net/projects/vmime/
Fabien LE LEZ
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux : std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je ne déclare quasiment jamais de variables de type map, je fais un typedef et je déclare une variable de ce type).
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne
<cdevienne@alphacent.com> wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux :
std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je
ne déclare quasiment jamais de variables de type map, je fais un
typedef et je déclare une variable de ce type).
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux : std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je ne déclare quasiment jamais de variables de type map, je fais un typedef et je déclare une variable de ce type).
Y a t-il une fonction de librarie standard qui permette de faire du genre age["Europe"]["France"]["Fred"] = 42; par exemple ?
Si tu as toujours trois clefs, tu peux faire une clef composée, un peu comme: class Clef [...]
Bon, il manque un "const" et une initialisation de paramètre, mais l'idée est là.
Christophe de Vienne
Fabien LE LEZ wrote:
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux : std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je ne déclare quasiment jamais de variables de type map, je fais un typedef et je déclare une variable de ce type).
C'est juste.
Fabien LE LEZ wrote:
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne
<cdevienne@alphacent.com> wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux :
std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je
ne déclare quasiment jamais de variables de type map, je fais un
typedef et je déclare une variable de ce type).
On Fri, 17 Oct 2003 15:05:49 +0200, Christophe de Vienne wrote:
Il suffit de faire des maps ( de maps )+ :
exemple avec 2 niveaux : std::map< std::string, std::map< std::string, int > > age;
Et typedef est ton ami, sinon ça devient vite ingérable (d'ailleurs je ne déclare quasiment jamais de variables de type map, je fais un typedef et je déclare une variable de ce type).
C'est juste.
Fabien LE LEZ
On Fri, 17 Oct 2003 19:18:25 +0200, Christophe de Vienne wrote:
template<class Key, class Val> class multidimensional_map : public std::map< std::vector<Key>, Val, lexicographical_container_compare< std::vector<Key> >
template<class Key, class Val>
class multidimensional_map :
public std::map<
std::vector<Key>,
Val,
lexicographical_container_compare< std::vector<Key> >
template<class Key, class Val> class multidimensional_map : public std::map< std::vector<Key>, Val, lexicographical_container_compare< std::vector<Key> >
En gros, ma_map["Fred"] est soit un nombre, soit un conteneur ; si c'est un conteneur, tu peux écrire ma_map["Fred"]["truc"] ; sinon, tu peux le convertir en un "Feuille&" (int dans ton cas).
NB : j'ai peu d'expérience dans ce type de structure, il doit être possible de faire plus élégant.
En gros, ma_map["Fred"] est soit un nombre, soit un conteneur ; si
c'est un conteneur, tu peux écrire ma_map["Fred"]["truc"] ; sinon, tu
peux le convertir en un "Feuille&" (int dans ton cas).
NB : j'ai peu d'expérience dans ce type de structure, il doit être
possible de faire plus élégant.
En gros, ma_map["Fred"] est soit un nombre, soit un conteneur ; si c'est un conteneur, tu peux écrire ma_map["Fred"]["truc"] ; sinon, tu peux le convertir en un "Feuille&" (int dans ton cas).
NB : j'ai peu d'expérience dans ce type de structure, il doit être possible de faire plus élégant.