Ответ 1
Я думаю, что вы пропустите #include <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);
Я думаю, что вы пропустите #include <string>
где-нибудь.
Не могли бы вы попробовать:
#include<string>
Кажется, компилятор не знает, как сравнивать строки. Возможно, она еще мало знает о струнах, но слишком сосредоточена на вашем map
, чтобы понять, что вне ATM.
Попробуйте m[s1] = v1;
.
Я думаю, что это связано с тем, что <map>
не включает <string>
, а <xstring>
. Когда вы добавляете элементы на карту, вам нужно найти правильную позицию на карте, отсортировав ее. При сортировке карта пытается найти operator <
, откуда находит правильное местоположение для нового элемента. Однако для определения строки в <xstring>
нет operator <
, поэтому вы получите сообщение об ошибке.
У вас есть несколько вариантов хранения строк в формате значения ключа:
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;
}
Вот способ настроить карту <...,...>
static std::map<std::string, RequestTypes> requestTypesMap = {
{ "order", RequestTypes::ORDER },
{ "subscribe", RequestTypes::SUBSCRIBE },
{ "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
вы можете попробовать std :: перед парой, это может работать
s1 - целое число, которое вы надеетесь передать как строка... вероятно, основная причина ошибки.