在双地图容器中查找整数

时间:2013-08-09 08:29:17

标签: c++ map

我想知道是否有办法在双类型地图容器中查找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。

3 个答案:

答案 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
}

这种方法的用例仍然不清楚......