Как я могу использовать разнородные типы ключей с помощью boost::unordered_flat_mapC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу использовать разнородные типы ключей с помощью boost::unordered_flat_map

Сообщение Anonymous »

Boost unordered_flat_map довольно хорош, он намного быстрее, чем std::unordered_map. Я пытаюсь использовать его с разнородными типами ключей:

Код: Выделить всё

boost::unordered::unordered_flat_map my_map;
my_map.emplace(std::string("Hello"), 1);
my_map.find(std::string_view("Hello"));
// no instance of overloaded function matches the argument list
argument types are: (std::string_view)
Теперь, поскольку я создал карту с типом ключа std::string, есть функция поиска, которая принимает std::string, но есть также шаблонная функция поиска, которая принимает K, и обычно эти вещи должны работать при условии, что контейнер:
  • Знает, как хешировать гетерогенный тип, и
  • Знает оператор равенства, который принимает гетерогенный тип в качестве правой части.
Даже если я это сделаю:

Код: Выделить всё

auto equal_to = [](auto& lhs, auto& rhs) { return lhs == rhs; };
И передайте этот класс равенства в контейнер, я все равно получаю сообщение об ошибке:

Код: Выделить всё

boost::unordered::unordered_flat_map my_map;
Как мне заставить это работать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... d-flat-map
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»