【发布时间】:2013-12-11 12:09:22
【问题描述】:
我想问一个与此相关的问题:Floating point keys in std:map
我用double 作为其他类型MyType 的键创建了一个std::map,即:
map<double,MyType> myMap;
我的问题是:
鉴于myMap.find(...) 是std::map 查找键的优化方法(参见How sets, multisets, maps and multimaps work internally),Floating point keys in std:map 中的方法是否明显未优化?我可以实现一些更高效的东西吗?
【问题讨论】:
-
我一直认为使用
double作为映射键是个坏主意,因为浮点不精确,它们不满足严格的弱排序。我错了吗? -
@Bathsheba 链接解决方案建议使用双容差来解决此问题。
-
Map 键必须带有严格的弱排序,
double的默认比较器不是这种情况。当心。 -
@KerrekSB 你能详细说明一下严格的弱点吗?这是因为“特殊”值,如正零和负零,以及 NaN 等,它们在比较中表现得很奇怪吗?或者我错过了什么。 “常规”浮点值?
-
@jalf:只是 NaN。 NaN 破坏了排序。
标签: c++ performance map double stdmap