在我的應用程序中,我需要一個哈希映射將字符串映射到大量的靜態對象。映射在申請期間保持不變。有沒有一種簡單的方法可以在編譯時預先生成映射,而不是在應用程序啓動時逐個構建它?在編譯時創建大散列圖的最佳方式(C++)?
0
A
回答
3
查找gperf,它會爲您生成完美散列的代碼。
1
您可以編寫一個簡單的代碼生成器,該代碼生成器用映射發出頭文件,並將其作爲構建過程中的預構建步驟運行。
1
您正在尋找Boost.Assign's map_list_of
。它也適用於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);
}
2
檢查Burtlebob完美的散列函數。根據我的經驗,它比gperf更靈活。 http://burtleburtle.net/bob/hash/perfect.html
相關問題
- 1. 以編程方式創建圖像的最佳方式
- 2. 以編程方式創建撥號圖像的最佳方法?
- 3. 以編程方式創建/編輯模板的最佳方法
- 4. 編譯時串散列
- 5. 在C#2.0中創建嚮導的最佳方式是什麼?
- 6. TYPO3 - 創建100000頁的最佳方式
- 7. 用PHP創建PDF的最佳方式
- 8. 創建主鍵的最佳方式 - Swift
- 9. C++創建未在編譯時
- 10. 以編程方式創建並編譯來自程序的C++
- 11. 在創建時將JSON發送到頁面的最佳方式
- 12. C++最佳方式
- 13. 創建大量虛擬數據的最佳方式是什麼?
- 14. 在Visual Studio中創建應用程序圖標的最佳方式C++
- 15. 每幀渲染和編輯大圖像的最佳方式?
- 16. 什麼是大量圖像編目的最佳方式?
- 17. 以文本方式編程創建SplashScreen的最佳示例
- 18. 在c中編寫解析器的最佳/最快的方式#
- 19. 創建一個C++ Dll的最佳實踐,編組在C#
- 20. 從Dojo中的對象列表創建表的最佳方式?
- 21. 用C++創建rw管道的最佳方式是什麼?
- 22. VS2005 .net 2.0 c#:創建xml文件的最佳方式
- 23. 是否有可能以編程方式創建散列規則?
- 24. 以編程方式創建佈局的最佳方式的提示
- 25. 創建無視圖的Drupal RSS提要的最佳方式
- 26. 用css創建100%寬度中間列的最佳方式
- 27. 使用鼠標創建地圖的最佳方式是什麼?
- 28. 從數據創建圖表的最佳方式
- 29. 從屏幕截圖創建FLV流的最佳方式
- 30. 創建縮略圖庫的最佳方式
在此示例中,該映射仍在運行時生成。它看起來像是同樣的操作的syniac糖。 – bradtgmurray 2011-03-21 16:18:37