Лучший способ создать большой hashmap во время компиляции (C ++)? - PullRequest
0 голосов
/ 11 сентября 2009

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

Ответы [ 4 ]

3 голосов
/ 11 сентября 2009

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

2 голосов
/ 06 февраля 2012

Проверьте идеальную функцию хэширования Burtlebob. По моему опыту, он более гибкий, чем gperf. http://burtleburtle.net/bob/hash/perfect.html

1 голос
/ 11 сентября 2009

Вы ищете 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 );  
}
1 голос
/ 11 сентября 2009

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

...