6
votes

Cartographie 4D en C ++?

Pouvez-vous s'il vous plaît dites-moi comment je peux écrire une carte multidimensionnelle. Pour une carte de deux dimensions, j'ai procédé à ce qui suit:

map<string, string, string, int> Employees;
Employees[“person1”]["gender"][“age”] = 200;


1 commentaires

Merci à tous de me montrer différentes manières avec des exemples.


5 Réponses :


2
votes

Vous pouvez utiliser std :: paire code> comme vos clés à la place.

Par exemple, P>

key_part partialKey = std::pair<std::string, std::string>("person1","gender");
key myKey = std::pair<key_part, std::string>(partialKey, "age");
Employees[myKey] = 200;


0 commentaires

1
votes

cartes imbriquées?
Carte >> Employés;

ou faire fonction comme

Findemplée (chaîne, chaîne, chaîne, int)
car il pourrait être plus facile d'appeler que de creuser la carte de troisième niveau.


0 commentaires

6
votes

Vous voulez normalement combiner les trois parties de la clé en une seule classe, avec un seul opérateur de comparaison. Vous pouvez utiliser quelque chose comme un paire , chaîne> code> ou un boost :: tuple ou le définissez vous-même:

class key_type { 
    std::string field1, field2, field3;
public:
    bool operator<(key_type const &other) { 
        if (field1 < other.field1)
            return true;
        if (field1 > other.field1)
            return false;
        if (field2 < other.field2)
            return true;
        if (field2 > other.field2)
            return false;
        return field3 < other.field3;
    }
};


0 commentaires

5
votes
map<string, map<string, map<string, int> > > employees;
employees["person1"]["gender"]["age"] = 200;

0 commentaires

1
votes

J'aime cette approche: xxx


0 commentaires