Je veux implémenter mon propre conteneur "simple" qui aura des propriétés de carte mais qui garde aussi l'ordre d'insertion. J'ai entendu parler de boost :: multi_index mais je trouve cela très difficile à comprendre pour ce que je veux.Comment faire ma "propre" carte sur gabarit?
Je fait une classe templated:
template<typename KEY, typename VALUE>
class MyMap {
private :
std::vector<KEY> m_keys;
std::vector<VALUE> m_values;
public :
void insert(KEY& key, VALUE& val) {
//Test if key exists //
m_keys.push_back(key);
m_values.push_back(val);
}
/* Other methods like erase/size/operator[]/begin/etc. */
};
Juste pour le tester, je voulais faire quelque chose comme ceci:
int main() {
MyMap<string,int> m;
m.insert("test",1);
m.insert("cat",2);
for(auto& item : m) {
cout << item << endl;
cout << m[item] << endl;
}
}
Mais je continue à obtenir une erreur de compilation sur les inserts (et [ ]) car il traduit ma clé dans une chaîne de base et non une chaîne. Cela me rend fou et je ne trouve aucune réponse (ou aucun mot pour décrire correctement mon problème à la recherche d'une réponse). Je suppose que cela a quelque chose à voir avec les allocateurs, mais je n'arrive pas à comprendre comment y remédier. Comment faire pour que ma carte fasse cette conversion mais reste aussi générale car j'en aurai besoin avec d'autres classes (propres)? Après avoir résolu le problème "chaîne", j'ai eu des problèmes lors du passage int, car il attendait & int. Suivi kebs conseil et implémenté un vecteur> à la place et s'est débarrassé des problèmes de conversion ... :)
Toute raison pour laquelle vous ne pas utiliser le conteneur fourni par la bibliothèque standard? – kebs
@kebs: Oui, je veux garder l'ordre d'insertion car j'en aurai besoin plus tard, mais je dois aussi associer une classe à une clé unique :) – Holywa
Je ne suis pas sûr que ce soit la meilleure façon d'y aller. Vous pouvez aussi stocker dans un 'std :: vector' quelque' std :: pair '(sauf si vous avez besoin d'y accéder via la clé). Mais d'un point de vue général, je pense que les situations où la bibliothèque standard ne rentre pas sont très rares ... –
kebs