Pregunta

En mi aplicación, necesito cadenas de mapeo hash para un gran número de objetos estáticos. Las asignaciones permanecen fijas durante la duración de la aplicación. ¿Existe una manera fácil de generar previamente las asignaciones en tiempo de compilación en lugar de construirlas elemento por elemento cuando se inicia la aplicación?

¿Fue útil?

Solución

Busque gperf , que genera un código para usted que hará un hash perfecto.

Otros consejos

Echa un vistazo a la función hash perfecta de Burtlebob. En mi experiencia es más flexible que gperf. http://burtleburtle.net/bob/hash/perfect.html

Podría escribir un generador de código simple que emita un archivo de encabezado con las asignaciones y ejecutarlo como un paso previo a la compilación en su proceso de compilación.

Estás buscando Boost. Asignar map_list_of . También funciona para los 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 );  
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top