我想知道是否有办法在双类型映射容器中找到一个 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。因为地图会默认搜索双精度。
一种方法是使用lower_bound
/upper_bound
成员函数来获取整数周围的值范围,然后手动检查该范围。
另一种方法是使用带有自定义比较器的映射,该比较器将键作为整数进行比较(参见std::map referernce),因此您可以保留初始键值并可以搜索整数。但是你不能搜索双打。
无论如何,这个任务有点奇怪,你可能应该重新考虑你的数据结构选择来解决你的问题。
如果您只对不可分割的部分感兴趣(或其他任何东西,因为您可以使用 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
}
这种方法的用例仍然不清楚......
以下应该有效:
it = mt.lower_bound(2);
但是,您需要事后检查该项目;
it->first<3;
必须产生正确的结果。