гашишпротив хэша - PullRequest
       7

гашишпротив хэша

0 голосов
/ 21 марта 2019

C ++ 17 введено hash<string_view>. При написании своих собственных хэшей я хочу повторно использовать STL-реализацию строкового хэша.

Медленнее std::hash<std::string>()("Hello, world"), чем std::hash<std::string_view>()("Hello, world")? Это то же самое?

Когда я хочу использовать std::hash<std::string>()?

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

std::hash<std::string>()("Hello, world") медленнее std::hash<std::string_view>()("Hello, world")?

Да.

Бывший медленнее, потому что создание std::string медленнее, чем создание std::string_view.

Когда я хочу использовать std::hash<std::string>()?

Если у вас есть объект std::string, и вы хотите вычислить из него значение хеш-функции.

1 голос
/ 21 марта 2019

std::hash<std::string> принимает std::string const& в качестве параметра для operator().Если у вас есть std::string и вы их хешируете, то это то, что вы хотите.Если вы используете hash<string_view>, то вам придется преобразовать std::string в std::string_view, что имеет определенную стоимость (не так много, но оно есть).

Если ваш набор данныхне содержит std::string s, но также содержит c-строки, тогда hash<string_view> может быть лучше.преобразование c-строки в std::string может потребовать динамического выделения памяти, поэтому, если вы можете избежать этого, вы обычно выигрываете в области производительности.Это требует профилирования, хотя, поскольку значение имеет значение std::string s и c-строк, а также размер c-строк, поскольку SSO (оптимизация коротких строк) может сделать std::hash<std::string> лучшим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...