翻译有误
查看原帖
翻译有误
104918
Fish_Clever楼主2022/7/29 14:55

这是原本的文字:

  • 如果查询的地名不存在或者没有地图包含它,或者包含它的地图总数超过i,应报告查询非法(如果存在,一并输出包含它的最详细地图名称)。

然而我对着《入门经典-习题与解答》(入土经典)作者的一行代码陷入了沉思:

void doRequest(const string& name, int level) {
    cout<<name<<" at detail level "<<level;
    
    if(!locIndice.count(name)) {
        cout<<" unknown location"<<endl;
        return;
    }
    
    vector<int> mis, levels;
    getMaps(locIndice[name], mis, levels); //显然,levels最后存放的是每个地图对应的详细值.
    if(mis.empty()) {
        cout<<" no map contains that location"<<endl;
        return;
    }
    
    int maxLevel = levels.back(); //因此才会在这里把最后一个揪出来,并与询问所需的详细值进行比较.
    if(maxLevel < level) //这里就是详细度不够的情况.
         cout<<" no map at that detail level; using "<<maps[mis.back()].name<<endl;
    else
    {
         vector<int>::iterator it = upper_bound(levels.begin(), levels.end(), level);
         assert(it != levels.begin());
         cout<<" using "<<maps[mis[it-levels.begin()-1]].name<<endl;
    }
}

所以应该改成(我把这两种拆开来了,第二种改了改):

  • 如果查询的地名不存在或者没有地图包含它,应报告查询非法(详见样例输出4,5行)
  • 如果包含它的地图中,不同面积的数量(即k)小于i,先报告非法,但仍输出包含它的最详细地图名称(详见样例输出3,7行)。
2022/7/29 14:55
加载中...