В моем приложении мне нужны строки отображения хеш-карт для большого количества статических объектов. Отображения остаются фиксированными на время применения. Есть ли простой способ предварительно генерировать сопоставления во время компиляции, а не создавать его поэтапно при запуске приложения?Лучший способ создать большой hashmap во время компиляции (C++)?
0
A
ответ
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
Проверьте отличную хеширующую функцию Burtlebob. По моему опыту он более гибкий, чем gperf. http://burtleburtle.net/bob/hash/perfect.html
Смежные вопросы
- 1. C++: Как создать константу во время компиляции?
- 2. Лучший способ создания N объектов во время компиляции
- 3. offsetof во время компиляции
- 4. Как создать массив во время компиляции?
- 5. Ошибки при отладке во время компиляции во время компиляции
- 6. лучший способ улучшения скорости компиляции в C++
- 7. Оптимизация интермодуля во время компиляции
- 8. Есть ли способ заменить функцию во время компиляции на C++?
- 9. Создать вектор из CSV во время компиляции в C++
- 10. C++, как создать свое собственное предупреждение во время компиляции
- 11. Лучший способ для создания объектов из XML во время выполнения
- 12. Лучший способ отображения результатов во время цикла
- 13. Лучший способ придать зависимость во время выполнения
- 14. Лучший способ создать установщик C#
- 15. Лучший способ создания hashmap arraylist
- 16. C# лучший способ хранения огромного количества данных во время выполнения
- 17. C++: устранить этот код во время компиляции?
- 18. Отказывание во время компиляции
- 19. Как выполнить препроцессор C во время компиляции?
- 20. Пропустить javadoc во время компиляции
- 21. Функция C++ не найдена во время компиляции
- 22. Лучший способ отправить большой файл
- 23. Определить значения во время компиляции?
- 24. C декораторы функций (обертки) во время компиляции
- 25. C++ проверка наследование во время компиляции
- 26. C пример структуры, ошибки во время компиляции
- 27. Регистрация типа C++ во время трюка компиляции
- 28. C++ function inling во время компиляции
- 29. Может ли C сортировать во время компиляции?
- 30. Проверка выравнивания массива C во время компиляции
В данном примере карта по-прежнему создается во время выполнения. Похоже, что это просто синачный сахар для той же операции. – bradtgmurray