C++ &引用;没有可行的从…转换的方法。”;在C+中使用地图时+;

C++ &引用;没有可行的从…转换的方法。”;在C+中使用地图时+;,c++,dictionary,C++,Dictionary,我尝试使用C++代码>(代码)>函数>代码>函数,它是C++标准库中的一个内置函数,它返回一个迭代器指向一个容器中的第一个元素,该元素的键不被认为是在代码> k>代码之前。我的理解是,它的用途如下: my_map.lower_bound(key) 我有一个班级SpeedProfile: #include <stdio.h> #include <map> using namespace std; class SpeedProfile { public: map

我尝试使用C++代码>(代码)>函数>代码>函数,它是C++标准库中的一个内置函数,它返回一个迭代器指向一个容器中的第一个元素,该元素的键不被认为是在<>代码> k>代码之前。我的理解是,它的用途如下:

my_map.lower_bound(key)
我有一个班级
SpeedProfile

#include <stdio.h>
#include <map>

using namespace std;

class SpeedProfile
{
public:
    map <int, float> timeSlotMap;
};
我得到以下错误,我不知道我应该如何继续

没有从“std:::uuu 1::map,std::uu 1::allocator>>::iterator”(又名“uuu map\u iterator*,long>>”)到“float”的可行转换


使用
auto lower\u b
可以解决错误警告,但我认为这不是正确的解决方法。

您自己也说过,
lower\u bound
返回的是迭代器而不是浮点

精确地说,它返回一个映射值类型的迭代器,该类型是一对键和值(
std::pair
)。所以要得到你想写的浮点值

float lower_b = dayProfile.timeSlotMap.lower_bound(secondsPassed)->second;
注意:如果所有键都小于
secondsPassed
,则此代码具有未定义的行为。在这种情况下,迭代器返回的是序列值的末尾(即
dayProfile.timeSlotMap.end()
),取消引用该迭代器是一个错误。

您说返回迭代器,但写
float lower\u b=
。如果要取消对迭代器的引用以获得
浮点值
,请使用
->second
float lower_b = dayProfile.timeSlotMap.lower_bound(secondsPassed)->second;