170 похожих чатов

А когда в плюсах появится возможность находить элемент в мапе

по string_view, когда типом ключа на самом деле является std::string?
Судя по доке функции find (https://en.cppreference.com/w/cpp/container/unordered_map/find), сейчас это можно сделать (с с++ 20 как раз), но для этого нужно писать свой хэшер, хотя вроде очевидно, что хэш string_view это такой же хэш как у std::string – почему так? Заставлять писать свой хэшер там, где не нужно, выглядит не оч привлекательно

18 ответов

15 просмотров

Можно использовать хэшер для вьюхи в качестве основного

Ruzal-Ibragimov Автор вопроса
Ruzal Ibragimov
Как это сделать не в 100500 строк кода?)

unordered_map<string, int, hash<string_view>, equal_to<>> Лучше, чем ничего

Ruzal-Ibragimov Автор вопроса
Dmitriy [Отпуск]
unordered_map<string, int, hash<string_view>, equa...

А equal_to точно надо сетить? Из-коробочный для string разве не подойдет?

Ruzal-Ibragimov Автор вопроса
Dmitriy [Отпуск]
Он же ждет string, как и хэш

https://godbolt.org/z/bGG6TE4de Что-то я не могу понять почему оно не заводится

Ruzal-Ibragimov Автор вопроса
Alexander Karaev
как минимум, он не transparent

Т.е. всё-таки надо писать свой struct string_hash?)

Ruzal Ibragimov
Т.е. всё-таки надо писать свой struct string_hash?...

struct my_hash : std::hash<std::string_view> { using is_transparent = void; } правда там какие-то ещё нюансы были, емнип

https://www.reddit.com/r/cpp/comments/phqxiq/transparent_find_is_a_pain_to_get_right/ :)

Ruzal-Ibragimov Автор вопроса
Alexander Karaev
struct my_hash : std::hash<std::string_view> { usi...

https://godbolt.org/z/Ghn7vnn48 так всё равно не работает

Dmitriy [Отпуск]
unordered_map<string, int, hash<string_view>, equa...

А что насчёт хеша вида [](auto&& v){ if constexpr string_view / string} ))

Ruzal-Ibragimov Автор вопроса
Alexander Karaev
unordered_map<string, int, sv_hash, equal_to<>> x;

А в чем отличие equal_to<> от equal_to<string_view>?

Похожие вопросы

Обсуждают сегодня

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
8
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Всем привет, препод задал вопрос, подскажите пожалуйста, какой адрес инкапсулирует указатель?
Свинка Пеппа
8
Почему никто ещё не написал квантовую виртуальную машину на Windows?
КТ315
7
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
Карта сайта