C ++ concurrent_unordered_map C ++ 11 Microsoft使用unsigned long作为键/ HASH函数

时间:2012-11-28 23:06:38

标签: c++ winapi c++11 thread-safety concurrenthashmap

我在Windows 7 64位中使用Visual Studio 2012。

我需要使用并发数据结构,因为我将使用线程。我发现微软有一些http://msdn.microsoft.com/en-us/library/dd504906.aspx#unordered_map

一般来说,我必须处理

将数据接收到队列....准备就绪时...继续接收数据。

我将使用microsoft提供的concurrent_unordered_map类来创建一个存储名为TouchInfo的类的cuncurrent映射。每个TouchInfo对象都有一个唯一的ID(unsigned long),这是我用来检索对象所需要的得到更新。

同时,我需要将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创建哈希......

我的设计中的任何输入和更改都是完全受欢迎的......

我非常欢迎回答我的问题!

谢谢!

1 个答案:

答案 0 :(得分:1)

concurrent_unordered_map使用std::hash,其unsigned long具有默认实现。它开箱即可正常工作。

默认哈希尝试在大多数用例中都是最佳的,但是没有保证,因为每个人的数据都不同。在疯狂地查看哈希函数之前肯定会对它进行基准测试(有很多,你可能会浪费很多时间)。