Map <string, string> как вставить данные на эту карту?

Мне нужно сохранить строки в формате значения ключа. Поэтому я использую Map, как показано ниже.

#include<map>
using namespace std;
int main()
{
    map<string, string> m;
    string s1 = "1";
    string v1 = "A";

    m.insert(pair<string, string>(s1, v1)); //Error
}

Ошибка при вводе строки ниже

ошибка C2784: 'bool std:: operator < (const std:: _ Tree < _Traits > &, const std:: _ Tree < _Traits > &)': не удалось вывести аргумент шаблона для 'const std:: _Tree < _Traits > & ' from 'const std::string'

Я попробовал функцию make_pair, как показано ниже, но это тоже сообщает о той же ошибке.

m.insert(make_pair(s1, v1));

Pls сообщит мне, что случилось, и какое решение для этой проблемы. После решения вышеуказанной проблемы я могу использовать, как показано ниже, для получения значения на основе ключа

m.find(s1);

Ответ 1

Я думаю, что вы пропустите #include <string> где-нибудь.

Ответ 2

Не могли бы вы попробовать:

#include<string>

Кажется, компилятор не знает, как сравнивать строки. Возможно, она еще мало знает о струнах, но слишком сосредоточена на вашем map, чтобы понять, что вне ATM.

Ответ 3

Попробуйте m[s1] = v1;.

Ответ 4

Я думаю, что это связано с тем, что <map> не включает <string>, а <xstring>. Когда вы добавляете элементы на карту, вам нужно найти правильную позицию на карте, отсортировав ее. При сортировке карта пытается найти operator <, откуда находит правильное местоположение для нового элемента. Однако для определения строки в <xstring> нет operator <, поэтому вы получите сообщение об ошибке.

Ответ 5

У вас есть несколько вариантов хранения строк в формате значения ключа:

m["key1"] = "val1";
m.insert(pair<string,string>("key2", "val2"));
m.insert({"key3", "val3"}); // c++11

И пройдитесь по С++ 11:

for( auto it = m.begin(); it != m.end(); ++it )
{
  cout << it->first; // key
  string& value = it->second;
  cout << ":" << value << endl;
}

Ответ 6

Вот способ настроить карту <...,...>

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};

Ответ 7

вы можете попробовать std :: перед парой, это может работать

Ответ 8

s1 - целое число, которое вы надеетесь передать как строка... вероятно, основная причина ошибки.