Предполагая, что hash
здесь std::hash
, специализация std::hash
для char*
или wchar*
отсутствует, кроме общей специализации для любого типа указателя, который хэшируется на основе значения указателя.
Итак, если вы хотите использовать TCHAR*
в качестве хеш-ключа, когда хеш-код основан на содержимом строки, а не на значении указателя, вам потребуется указать другой класс хеш-функтора.
Есть специализации std::hash
для string
и wstring
, которые, я думаю, вы могли бы использовать, если выберете правильную согласно _UNICODE
. Я говорю «я думаю», потому что TCHAR * следует просто преобразовать в string
или wstring
, но если я что-то пропустил, вы могли бы написать простую оболочку.
Однако, если вы собираетесь сделать что-то из этого, то вы также можете использовать string
или wstring
в качестве ключа хеширования, поскольку в любом случае все должно быть преобразовано для хеширования. Это также позволит вам добавлять строки в ваш unordered_set, не заставляя их висеть, пока они не будут удалены. С вашим кодом, представленным выше, я полагаю, что добавление в набор чего-либо, кроме строковых литералов, создает неудобства.
Если вы беспокоитесь о скорости и не беспокоитесь об управлении строками, выберите свой любимый алгоритм хеширования строк и примените его к строковым данным.