C++ 对值读取错误C++;

C++ 对值读取错误C++;,c++,dictionary,compiler-errors,std-pair,C++,Dictionary,Compiler Errors,Std Pair,我收到编译器错误: 错误:请求列表中的成员“第一个”。std::map::operator[], std::less,std::分配器>>>(*&0.0)).std::pair::second',这是 属于非类类型“int”int closestX=list[0]。第二个。第一个 尝试从名为list defined的映射读取数据时,迭代器为: map<double, pair<int, int>> list; map<double, pair<int, int

我收到编译器错误:

错误:请求列表中的成员“第一个”。std::map::operator[], std::less,std::分配器>>>(*&0.0)).std::pair::second',这是 属于非类类型“int”int closestX=list[0]。第二个。第一个

尝试从名为list defined的映射读取数据时,迭代器为:

map<double, pair<int, int>> list;
map<double, pair<int, int>>::iterator it = list.begin();

该错误似乎表明
列表[0]的返回类型是非类类型int,但该返回类型与closestX的值类型完全匹配,我现在遇到了麻烦。假设列表[0]已初始化并保存有效值。

列表[0]
已经是值类型
对,而不是迭代器类型。这样你就可以写作了

int closestX = list[0].first;
int closestY = list[0].second;

列表[0]
已经是值类型
,而不是迭代器类型。这样你就可以写作了

int closestX = list[0].first;
int closestY = list[0].second;
此错误似乎表明列表[0].second.first的返回类型为非类类型int

否,错误消息表明
列表[0]。second
不是类类型,因此您无法对其执行
。first

请注意,将返回
映射的\u类型

返回对映射到与键等效的键的值的引用

list=>map
列表[0]=>对
列表[0]。秒=>int
列表[0]。second.first=>失败
此错误似乎表明列表[0].second.first的返回类型为非类类型int

否,错误消息表明
列表[0]。second
不是类类型,因此您无法对其执行
。first

请注意,将返回
映射的\u类型

返回对映射到与键等效的键的值的引用

list=>map
列表[0]=>对
列表[0]。秒=>int
列表[0]。second.first=>失败

列表
是个坏名字。人们很容易将其误认为
std::list
list
是个坏名字。人们很容易将其误认为是std::list
。但list[0]不是这种类型吗?我认为这两个值都存储在一个映射中。@Stephen这不是一个类型,它只是一个模板参数的集合。对于
map
运算符[]
返回的
mapped\u type
,它只是第二个模板参数的typedef,即
pair
。@PaulRooney抱歉,它不是类型pairNo查看各种模板参数和
运算符[]
的返回值。您所描述的是
value\u type
,这是使用
insert
插入地图时使用的类型。但是列表[0]不是类型吗?我认为这两个值都存储在一个映射中。@Stephen这不是一个类型,它只是一个模板参数的集合。对于
map
运算符[]
返回的
mapped\u type
,它只是第二个模板参数的typedef,即
pair
。@PaulRooney抱歉,它不是类型pairNo查看各种模板参数和
运算符[]
的返回值。您所描述的是
值\u类型
,这是使用
插入
插入地图时使用的类型。但列表已初始化为pair@Stephen您的“列表”是一个映射,一个关联容器。它是用两个参数(double和pair)初始化的,但不是一个pair@Stephen这就是
std::map::operator[]
的工作方式,它将返回映射到指定键的值,即
mapped\u type
,而不是整个
value\u type
。好的,编辑后这会更有意义。但是,我如何获得第一个键的值呢?@Stephen将返回映射的第一个元素的迭代器点
a_-map.begin()->第一个
将返回键,
a_-map.begin()->第二个
将返回映射的_值,即
对。但列表已初始化为pair@Stephen您的“列表”是一个映射,一个关联容器。它是用两个参数(double和pair)初始化的,但不是一个pair@Stephen这就是
std::map::operator[]
的工作方式,它将返回映射到指定键的值,即
mapped\u type
,而不是整个
value\u type
。好的,编辑后这会更有意义。但是,我如何获得第一个键的值呢?@Stephen将返回映射的第一个元素的迭代器点
a_-map.begin()->第一个
将返回键,
a_-map.begin()->第二个
将返回映射的_值,即
int closestX = list[0].first;
int closestY = list[0].second;
list                 => map<double, pair<int, int>>
list[0]              => pair<int, int>
list[0].second       => int
list[0].second.first => failed