станд :: Картабеда - PullRequest
       23

станд :: Картабеда

0 голосов
/ 23 сентября 2019

Я пытаюсь создать std:map с std::any типами ключей и значений

Visual Studio 2017

std::map<std::any, std::any> m("lastname", "Ivanov");
std::cout << std::any_cast<std::string>(m["lastname"]) << std::endl;

, получая

ошибка: двоичный файл <<: не найден оператор, который принимает левый операнд типа 'const_Ty' </p>

1 Ответ

0 голосов
/ 23 сентября 2019

std::any не имеет двоичного оператора '<' (меньше).Метод по умолчанию для «индексации» <code>std::map элементов.

Решения могут включать:

  1. Использование другой клавиши (с оператором '<') </li>
  2. Используйте пользовательский компаратор, например:

    #include <map>
    #include <any>
    
    int main() {
        auto elements = std::initializer_list<std::pair<const std::any, std::any>>{};
        auto mymap = std::map(elements, [](const std::any& lhs, const std::any& rhs){return false;});
    }
    

Затем реализуйте функцию сравнения вместо возврата false.

попробуйтесам

...