我收到编译错误:
错误:请求'list.std :: map :: operator []中的成员'first', std :: less,std :: allocator> > >((*& 0.0))。std :: pair :: second',即 non-class type'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]已初始化并保存有效值。
答案 0 :(得分:3)
list[0]
已经是值类型pair<int, int>
,而不是迭代器类型。所以你可以写
int closestX = list[0].first;
int closestY = list[0].second;
答案 1 :(得分:1)
错误似乎表明list [0] .second.first的返回类型是非类型int
不,错误消息告诉list[0].second
不是类类型,因此您无法对其执行.first
。
请注意,std::map::operator[]
将返回mapped_type
。
返回对映射到等效于键的键的值的引用。
list => map<double, pair<int, int>>
list[0] => pair<int, int>
list[0].second => int
list[0].second.first => failed