std :: map find()返回错误

时间:2016-12-22 11:46:11

标签: c++

我正在尝试在VS2015中编译以下代码。我的std :: map的第一个版本正在编译,但秒版本没有编译。请让我知道我在这里做错了什么..

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::map<std::string, DataDictionary> _p1;
DataDictionary DD = _p1.find["1"]; //ERROR

我正在尝试使用带有DataDictionary结构的map,并使用_p1.find["1"]语法来访问元素,因为我假设这种方法比向地图声明迭代器更快,然后使用find() 。请帮忙。谢谢,

2 个答案:

答案 0 :(得分:2)

  

我正在尝试使用带有DataDictionary结构的map,并使用_p1.find["1"]语法来访问元素

不,您正尝试在成员函数上使用下标运算符:

find("1")可行。

find["1"]不应该编译。

考虑使用_p1.find("1")_p1["1"]。它们之间的区别在于find返回一对地图中的位置和一个布尔标志一个迭代器(可能超过映射序列的末尾)和下标运算符({{1返回对现有元素的引用,或者添加一个元素(如果找不到),并返回对该元素的引用。

要检查地图是否包含密钥,请改用["1"]

答案 1 :(得分:0)

我认为你的意思是

_p1.find("1");

它返回找到项目的迭代器。

使用

std::map<std::string, DataDictionary>::iterator item = _p1.find("1");

在C ++ 11中你可以做到

 auto item = _p1.find("1");