我在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创建哈希......
我的设计中的任何输入和更改都是完全受欢迎的......
我非常欢迎回答我的问题!
谢谢!
答案 0 :(得分:1)
concurrent_unordered_map
使用std::hash
,其unsigned long
具有默认实现。它开箱即可正常工作。
默认哈希尝试在大多数用例中都是最佳的,但是没有保证,因为每个人的数据都不同。在疯狂地查看哈希函数之前肯定会对它进行基准测试(有很多,你可能会浪费很多时间)。