我有这张地图:map<int, int > items
。
给定一个键,我希望此映射返回与该键对应的项目(如果存在),否则映射返回键立即小于给定键的项目。
例如,如果我有:
items[0]=0;
items[6]=10;
items[15]=18;
items[20]=22;
与 key=15 相比,我希望映射返回值为 18 的项目,否则对于 key=9,我希望映射返回值为 10 的项目。
我还没有找到适合这种情况的功能。但我尝试了这样的方式:
itlow=items.lower_bound(key);
if(!items.count(key))
itlow--;
return itlow->second;
这按我想要的方式工作,在地图中输入最小值items[0]=0
默认情况下,但我知道itlow--;
这不是好的编程。我能怎么做?谢谢大家。
您只需要检查您的itlow
已经items.begin()
。如果是,则地图中不存在这样的元素:
itlow=items.lower_bound(key);
if(itlow->first == key)
return itlow->second;
else if(itlow != items.begin())
itlow--;
return itlow->second;
else
throw some_exception();
您可以返回迭代器,而不是抛出异常,然后您可以返回items.end()
如果没有找到这样的元素。
#include <iostream>
#include <map>
using namespace std;
map<int, int>::const_iterator find(const map<int, int> &items, int value)
{
auto itlow = items.lower_bound(value);
if(itlow->first == value)
return itlow;
else if(itlow != items.cbegin())
return --itlow;
else
return items.cend();
}
int main()
{
map<int, int> items;
items[2]=0;
items[6]=10;
items[15]=18;
items[20]=22;
auto i = find(items, 0);
if(i != items.cend())
{
cout << i->second << endl;
}
i = find(items, 15);
if(i != items.cend())
{
cout << i->second << endl;
}
i = find(items, 9);
if(i != items.cend())
{
cout << i->second << endl;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)