2009-09-11 2 views
0

В моем приложении мне нужны строки отображения хеш-карт для большого количества статических объектов. Отображения остаются фиксированными на время применения. Есть ли простой способ предварительно генерировать сопоставления во время компиляции, а не создавать его поэтапно при запуске приложения?Лучший способ создать большой hashmap во время компиляции (C++)?

ответ

3

Посмотрите gperf, он генерирует код для вас, что будет совершенно хэш.

1

Вы можете написать простой генератор кода, который испускает файл заголовка с сопоставлениями и запускает его как шаг предварительной сборки в процессе сборки.

1

Вы ищете Boost.Assign's map_list_of. Он также работает для хэшмапов.

#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); 
} 
+2

В данном примере карта по-прежнему создается во время выполнения. Похоже, что это просто синачный сахар для той же операции. – bradtgmurray

Смежные вопросы