C++ concurrent_unordered_map C++11 Microsoft 使用无符号长作为密钥/哈希函数

C++ concurrent_unordered_map C++11 Microsoft Using unsigned long as key / HASH Function

本文关键字:密钥 函数 哈希 无符号 unordered concurrent map C++11 Microsoft C++      更新时间:2023-10-16

我在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(无符号长),这是我用来检索对象(因为它需要更新)的 ID。

同时,我需要将 TouchInfo 插入到并发队列中...... 一旦队列达到一个数字,我就会处理队列...(不同的线程)

1. 我的第一个问题是我是否需要无符号长...无符号长整型是系统从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来创建哈希...

完全欢迎对我的设计进行任何输入和更改...

非常欢迎回答我的问题!

谢谢!

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

默认哈希尝试在大多数用例中达到最佳状态,但无法保证,因为每个人的数据都不同。在疯狂地查看哈希函数之前,一定要对其进行基准测试(有很多,您可能会浪费大量时间)。