карта <строка, строка> как вставить данные в эту карту? - PullRequest
12 голосов
/ 14 сентября 2010

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

#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));

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

m.find(s1);

Ответы [ 7 ]

35 голосов
/ 14 сентября 2010

Я думаю, вы где-то пропускаете #include <string>.

7 голосов
/ 14 сентября 2010

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

#include<string>

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

2 голосов
/ 08 сентября 2018

Теперь у вас есть несколько возможностей, как хранить строки в формате значения ключа:

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

И просматривать его в c ++ 11:

for( auto it = m.begin(); it != m.end(); ++it )
{
  cout << it->first; // key
  string& value = it->second;
  cout << ":" << value << endl;
}
2 голосов
/ 14 сентября 2010

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

1 голос
/ 14 сентября 2010

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

0 голосов
/ 20 декабря 2018

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

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
0 голосов
/ 14 марта 2016

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

...