Question

Dans mon application, j'ai besoin d'une carte de hachage pour mapper des chaînes sur un grand nombre d'objets statiques. Les mappages restent fixes pour la durée de l'application. Existe-t-il un moyen simple de pré-générer les mappages au moment de la compilation plutôt que de les construire élément par élément au démarrage de l'application?

Était-ce utile?

La solution

Recherchez gperf , il génère pour vous un code parfaitement haché.

Autres conseils

Découvrez la fonction de hachage parfaite de Burtlebob. D'après mon expérience, il est plus flexible que gperf. http://burtleburtle.net/bob/hash/perfect.html

Vous pouvez écrire un simple générateur de code qui émet un fichier d'en-tête avec les mappages et l'exécuter en tant qu'étape de pré-génération dans votre processus de construction.

Vous recherchez Boost. Attribuez la map_list_of . Cela fonctionne aussi pour hashmaps.

#include <boost/assign/list_of.hpp> // for 'map_list_of()'
#include <boost/assert.hpp> 
#include <map>
using namespace std;
using namespace boost::assign; // bring 'map_list_of()' into scope

{
    map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);
    BOOST_ASSERT( next.size() == 5 );
    BOOST_ASSERT( next[ 1 ] == 2 );
    BOOST_ASSERT( next[ 5 ] == 6 );

    // or we can use 'list_of()' by specifying what type
    // the list consists of
    next = list_of< pair<int,int> >(6,7)(7,8)(8,9);
    BOOST_ASSERT( next.size() == 3 );
    BOOST_ASSERT( next[ 6 ] == 7 );
    BOOST_ASSERT( next[ 8 ] == 9 );  
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top