Когда вы читаете ошибку, она говорит вам точно о проблеме:
Type 'map<int, std::__1::string>' (aka 'map<int, basic_string<char, char_traits<char>, allocator<char> > >') does not provide a call operator
У вас есть карта от int до строки, которая не предоставляет оператора вызова. Это означает, что нет функции std::map<...>::operator()(...)
. Так что вам нужно сделать, чтобы вы go указали на ссылку типа cppreference , и вы увидите, что operator()
.
нет. Далее вы увидите, что есть раздел Доступ к элементу , который дает вам две функции:
at
: доступ к указанному элементу с проверкой границ operator[]
: доступ или указание вставки element
Это довольно точно говорит о том, какие функции существуют. Если вы проверите это более подробно, вы также увидите сигнатуру функции , например, для operator[]
:
T& operator[]( const Key& key );
T& operator[]( Key&& key );
Это означает, что вы можете передать или ссылку на rvalue или const. к значению оператора скобки. Также внимательно прочитайте документацию и примеры кода в конце, чтобы понять, что значения вставляются в map
, если они еще не существовали (в отличие от at
, который будет выбрасывать, если элемент не существует).
Итак, наконец, пример использования:
std::map<int, std::string> m;
m[3] = "a"; // inserts "a" at position 3
std::cout << m[3]; // prints "a"
m[3] = "b"; // modifies the conetent at 3 to "b"
std::cout << m[3]; // prints "b"
m.at(3) = "c"; // modifies the content at 3 to "c"
std::cout << m[3]; // prints "b"
m.at(4) = "d"; // this will throw std::out_of_range