配对值读取错误C ++

问题描述 投票:1回答:2

我收到编译器错误:

错误:请求'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]被初始化并保持有效值。

c++ dictionary compiler-errors std-pair
2个回答
1
投票

该错误似乎表明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

3
投票

list[0]已经是值类型pair<int, int>,而不是迭代器类型。所以你可以写

int closestX = list[0].first;
int closestY = list[0].second;
© www.soinside.com 2019 - 2024. All rights reserved.