Domanda

Nella mia applicazione, ho bisogno di una mappa hash che associa le stringhe a un gran numero di oggetti statici. I mapping rimangono fissi per la durata dell'applicazione. Esiste un modo semplice per pre-generare i mapping in fase di compilazione anziché crearlo elemento per elemento all'avvio dell'applicazione?

È stato utile?

Soluzione

Cerca gperf , genera per te un codice che avrà un hash perfetto.

Altri suggerimenti

Scopri la perfetta funzione di hashing di Burtlebob. Nella mia esperienza è più flessibile di gperf. http://burtleburtle.net/bob/hash/perfect.html

Potresti scrivere un semplice generatore di codice che emette un file di intestazione con i mapping ed eseguirlo come fase di pre-compilazione nel tuo processo di compilazione.

Stai cercando Boost. Assegna map_list_of . Funziona anche con hashaps.

#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 );  
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top