Frage

In meiner Anwendung, ich brauche einen Hash-Map-Mapping-Strings zu einer großen Anzahl von statischen Objekten. Die Zuordnungen bleiben für die Dauer der Anwendung festgelegt. Gibt es eine einfache Möglichkeit, die Zuordnungen bei der Kompilierung vorab zu erzeugen, anstatt Gebäude es Element-für-Element, wenn die Anwendung gestartet wird?

War es hilfreich?

Lösung

Sehen Sie gperf , erzeugt er Code für Sie das wird perfekt Hash.

Andere Tipps

Überprüfen Sie heraus Burtlebob die perfekte Hash-Funktion. Nach meiner Erfahrung ist es flexibler als gperf. http://burtleburtle.net/bob/hash/perfect.html

Sie können einen einfachen Code-Generator schreiben, die eine Header-Datei mit den Zuordnungen emittieren, und führen Sie das als Pre-Build-Schritt in Ihrem Build-Prozess.

Sie suchen -Boost. Assign map_list_of . Es funktioniert für Hashmaps zu.

#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 );  
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top