配对值读取错误C ++

时间:2016-02-11 03:07:54

标签: c++ dictionary compiler-errors std-pair

我收到编译错误:

  

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

2 个答案:

答案 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