Bonjour,
Si et seulement si tes clés sont immutables (pas de modification sur les clés) alors il existe une solution très pratique qui consiste à créer une classe représentant un wrapper extrêmement léger sur une chaine en mémoire (un char* + une taille) mais qui propose l'interface familière de std::string
Sauf qu'il n'y a pas besoin de le coder soit-même, vu que des gros projets C++ open-source l'ont déjà fait

(mais bizarrement pas boost. Pourtant ce genre de classe extrêmement utile me semble pile-poil dans le scope de boost mais bon...)
Par exemple :
StringPiece du projet google Chrome :
http://code.google.com/p/re2/source/.../stringpiece.h
ou StringRef du projet LLVM :
http://llvm.org/svn/llvm-project/llv...DT/StringRef.h
http://llvm.org/svn/llvm-project/llv.../StringRef.cpp
Très pratique car :
- License BSD
- Pas de dépendance (pour StringRef il faut quand même virer deux trois fonctions qui induisent des dépendances vers d'autres parties de LLVM)
Donc si tout se passe bien, dans ton cas, il devrait suffire de rajouter un constructeur StringPiece(char*, size_t) pour limiter aux 16 premiers char de la clé, puis dans ton algo de tri faire un chercher/remplacer de std::string par StringPiece/StringRef, et ça devrait suffire.
Partager