Я использую Visual Studio 2012 в Windows 7 64 бит.
Мне нужно использовать параллельные структуры данных, потому что я буду использовать потоки. Я обнаружил, что у Microsoft есть несколько http://msdn.microsoft.com/en-us/library/dd504906.aspx#unordered_map
В общем, я должен обработать
получать данные в очередь …. обрабатывать, когда готовы … продолжать получать данные.
Я собираюсь использовать класс concurrent_unordered_map, предоставленный microsoft, чтобы иметь карту cuncurrent, в которой хранится класс с именем TouchInfo. Каждый объект TouchInfo имеет уникальный идентификатор (длинный без знака), который я использовал для извлечения объекта по мере необходимости его обновления.
В то же время мне нужно вставить TouchInfo в параллельную очередь …
Как только очередь попадает в число, я обрабатываю очередь … (другой поток)
1.
Мой первый вопрос: нужна ли мне специальная хеш-функция длинного без знака … Длинный без знака — это идентификатор (dwID), предоставляемый системой из системы multi-touch в Windows 7 (WinUser.h), поскольку у меня нет контроля я хочу убедиться, что моя хеш-функция оптимизирована.
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
, Это будет хорошо работать прямо из коробки.
Хэш по умолчанию пытается быть оптимальным для большинства случаев использования, но нет никаких гарантий, потому что данные у всех разные. Определенно сравните его, прежде чем сходить с ума, глядя на хэш-функции (их много, и вы можете потратить много времени).
Других решений пока нет …