簡體   English   中英

C ++ parallel_unordered_map C ++ 11 Microsoft使用unsigned long作為鍵/ HASH函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM