我想知道是否有办法在双类型地图容器中查找int。例如,在以下示例中
std::map<double,double> mt;
mt[2.33] =3.45;
if(mt.find(2)!=mt.end()) //How to do a search for an int instead of a map
{
//Found
}
我想知道是否有办法告诉地图搜索int而不是double。由于地图默认会搜索double。
答案 0 :(得分:2)
一种方法是使用lower_bound
/ upper_bound
成员函数获取整数范围内的一系列值,然后手动检查此范围。
其他方法是使用带有自定义比较器的映射,该比较器将键比较为整数(请参阅std::map referernce),因此您可以保留初始键值并可以搜索整数。但是你不能搜索双打。
无论如何,任务有点奇怪,你可能应该重新考虑你的问题的数据结构选择。
答案 1 :(得分:1)
以下内容应该有效:
it = mt.lower_bound(2);
但是,您需要在事后检查该项目;
it->first<3;
为获得正确的结果,必须为真。
答案 2 :(得分:1)
如果您只对整体部分感兴趣(或其他任何内容,因为您可以使用lambda),您可以使用
auto result = find_if(begin(mt), end(mt),
[&](pair<double, double> p){return (int)(p.first) == 2)}
)
if (result != mt.end())
{
// do your stuff
}
这种方法的用例仍然不清楚......