Я пытаюсь скомпилировать приведенный ниже код в VS2015. Первая версия моей std :: map компилируется, но секундная версия не компилируется. Пожалуйста, дайте мне знать, что я делаю неправильно здесь ..std :: map find() возвращающая ошибка
std::map<int, std::string> _p;
typedef std::pair<int, std::string> _q;
_p.insert(_q(0, "Football0"));
_p.insert(_q(1, "Football1"));
std::string str = _p[1]; //OK...compiles and executes, no error, str = "Football1" as expected
std::map<int, DataDictionary> _p1;
typedef std::pair<int, DataDictionary> _q1;
DataDictionary dd1;
dd1.i = 0;
dd1.version = "ver1";
_p1.insert(_q1(0, dd1));
DataDictionary dd2;
dd2.i = 0;
dd2.version = "ver2";
_p1.insert(_q1(1, dd2));
DataDictionary DD = _p1.find[1]; //error C3867: 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::find': non-standard syntax; use '&' to create a pointer to member
Даже если я решу изменить зЬй :: Карта и использовать следующее, я получаю ту же ошибку:
std::map<std::string, DataDictionary> _p1;
DataDictionary DD = _p1.find["1"]; //ERROR
I я пытаюсь использовать карту с структурой DataDictionary и использовать синтаксис _p1.find["1"]
для доступа к элементам, поскольку я предполагаю, что этот подход будет быстрее, чем объявление итератора на карту, а затем использовать find(). Пожалуйста помоги. Спасибо,
['std :: map :: find()'] (http://en.cppreference.com/w/cpp/container/map/find) не возвращает тип, который, по вашему мнению, он делает. –
Вы можете использовать квадратные скобки, [* индексный оператор *] (http://en.cppreference.com/w/cpp/container/map/operator_at) или ['find'] (http: //en.cppreference .com/w/cpp/container/map/find), который является обычным вызовом функции, поэтому использует круглые скобки. Вы смешиваете оба. – BoBTFish
Спасибо за ваш ответ. Но учтите, что код - std :: string str = _p [1]; фактически работает. Только когда я пытаюсь вернуть struct вместо std :: string, я получаю ошибку компилятора – XMarshall