[英]C++ concurrent_unordered_map C++11 Microsoft Using unsigned long as key / HASH Function
我正在Windows 7 64位中使用Visual Studio 2012。
我需要使用並發數據結構,因為我將使用線程。 我發現微軟有一些http://msdn.microsoft.com/en-us/library/dd504906.aspx#unordered_map
一般來說,我必須處理
將數據接收到隊列中。准備就緒的過程繼續接收數據。
我將使用由Microsoft提供的current_unordered_map類具有一個並存的映射,該映射存儲名為TouchInfo的類。每個TouchInfo對象都有一個唯一的ID(無符號長),這是我用來檢索該對象的原因,因為它需要更新。
同時,我需要將TouchInfo插入並發隊列中。一旦隊列中出現一個數字,我就對該隊列進行處理...(不同的線程)
1.我的第一個問題是我是否需要unsigned long的特殊哈希函數... unsigned long是系統從Windows 7中的多點觸摸系統(WinUser.h)給定的ID(dwID),因為沒有ID的控制,我想確保我的哈希函數得到了優化。
typedef struct tagTOUCHINPUT {
LONG x;
LONG y;
HANDLE hSource;
DWORD dwID;
DWORD dwFlags;
DWORD dwMask;
DWORD dwTime;
ULONG_PTR dwExtraInfo;
DWORD cxContact;
DWORD cyContact;
} TOUCHINPUT, *PTOUCHINPUT;
也許我不需要做任何事情,只是聲明
我在網路上看到有人使用Boost來建立Hash ...
我對設計的任何輸入和更改都將受到歡迎...
非常歡迎回答我的問題!
謝謝!
concurrent_unordered_map
使用std::hash
,其默認實現為unsigned long
。 開箱即用就可以了。
默認散列試圖在大多數用例中都是最佳的,但是不能保證,因為每個人的數據都是不同的。 在瘋狂地研究哈希函數之前,一定要對其進行基准測試(有很多,可能會浪費很多時間)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.