-4

我想知道是否有办法在双类型映射容器中找到一个 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。因为地图会默认搜索双精度。

4

3 回答 3

2

一种方法是使用lower_bound/upper_bound成员函数来获取整数周围的值范围,然后手动检查该范围。

另一种方法是使用带有自定义比较器的映射,该比较器将键作为整数进行比较(参见std::map referernce),因此您可以保留初始键值并可以搜索整数。但是你不能搜索双打。

无论如何,这个任务有点奇怪,你可能应该重新考虑你的数据结构选择来解决你的问题。

于 2013-08-09T08:37:16.770 回答
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
}

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

于 2013-08-09T09:22:01.467 回答
1

以下应该有效:

 it = mt.lower_bound(2);

但是,您需要事后检查该项目;

 it->first<3;

必须产生正确的结果。

于 2013-08-09T08:38:00.897 回答