这是原本的文字:
然而我对着《入门经典-习题与解答》(入土经典)作者的一行代码陷入了沉思:
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;
}
}
所以应该改成(我把这两种拆开来了,第二种改了改):