C++ cpp map作为功能参数获取警告信息“;“丢弃限定符”;

C++ cpp map作为功能参数获取警告信息“;“丢弃限定符”;,c++,map,C++,Map,使用CPP映射,从eclipse编辑器获取警告信息 Point find_shortest_node(const vector<Point> &openset,const map<Point, int> &f_score,const map<Point, vector<int> > &f_direction) { vector<Point>::iterator iner_iterator = openset

使用CPP映射,从eclipse编辑器获取警告信息

Point find_shortest_node(const vector<Point> &openset,const   map<Point, int> &f_score,const map<Point, vector<int> > &f_direction) {

vector<Point>::iterator iner_iterator = openset.begin();
Point min_point = *iner_iterator;
while (iner_iterator != openset.end()) {
    if (f_score[*iner_iterator] < f_score[min_point]) {
        min_point = *iner_iterator;
    } 
        else if (f_score[*iner_iterator] == f_score[min_point]) {
            vector<int> temp1 = f_direction[*iner_iterator], temp2 =f_direction[min_point];
            if (temp1.size() < temp2.size()) {
            min_point = *iner_iterator;
            continue;
        }
    }
    iner_iterator++;
}
return min_point;
Point find_shortest_节点(常量向量和openset、常量映射和f_分数、常量映射和f_方向){
vector::iterator\u iterator=openset.begin();
Point min_Point=*iner_迭代器;
while(iner\u迭代器!=openset.end()){
if(f_分数[*iner_迭代器]
}

警告信息:

将“const std::map”作为“\u Tp&std::map::operator[](const_KT&)[with _KT=Point、\u Key=Point、\u Tp=int、\u Compare=std::less、\u Alloc=std::allocator>]”的“this”参数传递将丢弃限定符[-fppermissive]


最简单的解决办法是更换

f_score[something]

这适用于
const
引用,因为当未找到
某物时,它不会创建新元素。您应该检查是否确实找到了元素,尽管:

map<Point, int>::const_iterator it = f_score.find(something);
if (it != f_score.end()) {
    // ok, something was found
} else {
    // element not found
}
map::const\u迭代器it=f\u score.find(某物);
如果(it!=f_score.end()){
//好的,发现了一些东西
}否则{
//未找到元素
}

出于某种原因,Eclipse认为
f_分数
const
。根据您的声明,它不是
const
,因此这看起来像是Eclipse编辑器的问题

如果您有一个兼容C++11的编译器,您可以通过使用而不是方括号
[]
运算符来解决此问题,如下所示:

while (iner_iterator != openset.end()) {
    if (f_score.at(*iner_iterator) < f_score.at(min_point)) {
        min_point = *iner_iterator;
    } else if (f_score.at(*iner_iterator) == f_score.at(min_point)) {
            vector<int> temp1 = f_direction.at(*iner_iterator), temp2 =f_direction.at(min_point);
            if (temp1.size() < temp2.size()) {
            min_point = *iner_iterator;
            continue;
        }
    }
    iner_iterator++;
}
while(iner\u迭代器!=openset.end()){
if(f_分数点(*iner_迭代器)
我没有在您的代码中看到声明为
const
map
引用,但我仍然怀疑这就是问题所在。发布此消息时,您似乎从第二个参数之前删除了
const
关键字。你确定你的真实代码中没有常数吗?
while (iner_iterator != openset.end()) {
    if (f_score.at(*iner_iterator) < f_score.at(min_point)) {
        min_point = *iner_iterator;
    } else if (f_score.at(*iner_iterator) == f_score.at(min_point)) {
            vector<int> temp1 = f_direction.at(*iner_iterator), temp2 =f_direction.at(min_point);
            if (temp1.size() < temp2.size()) {
            min_point = *iner_iterator;
            continue;
        }
    }
    iner_iterator++;
}