我收到编译器错误:
错误:请求'list.std :: map :: operator []中的成员'first',std :: less,std :: allocator >>>((*&0.0))。std :: pair :: second ',它是非类型的'int'int nearestX = list [0] .second.first;
当尝试从名为list的映射中读取数据并使用迭代器时:
map<double, pair<int, int>> list;
map<double, pair<int, int>>::iterator it = list.begin();
列表中的成员插入:
list.insert(it, pair<double, pair<int, int>>(findDistance(posr,posc,j, i), pair<int, int>(j, i)));
我正在使用以下方法从地图中读取值:
int closestX = list[0].second.first;
int closestY = list[0].second.second;
该错误似乎表明list[0].second.first
的返回类型是非类型int,但该返回类型与nearestX的值类型完全匹配,现在我已经碰壁了。假设列表[0]被初始化并保持有效值。
该错误似乎表明list [0] .second.first的返回类型是非类型int
不,错误消息告诉list[0].second
不是类类型,所以你不能对它执行.first
。
请注意,std::map::operator[]
将返回mapped_type
。
返回对映射到等效于key的键的值的引用。
list => map<double, pair<int, int>>
list[0] => pair<int, int>
list[0].second => int
list[0].second.first => failed
list[0]
已经是值类型pair<int, int>
,而不是迭代器类型。所以你可以写
int closestX = list[0].first;
int closestY = list[0].second;