我似乎Ord无法用C++比较器对象的特性完成同样的事情.以简化更复杂的方案为例:
int epsilon = 0.001;
auto less = [epsilon](const double a, const double b) {
if (fabs(a - b) > epsilon) {
return a < b;
}
else {
return false;
}
};
std::map<float, int, decltype(less)> myMap(less);
myMap.insert(std::make_pair(1.0, 1));
myMap.insert(std::make_pair(2.0, 2));
myMap.insert(std::make_pair(3.0, 3));
auto found = myMap.find(1.0001);
assert(found != myMap.end());
assert(found->second == 1);
Run Code Online (Sandbox Code Playgroud)
我想比较器有一些运行时上下文,比如epsilon值.我无法弄清楚你将如何做到这一点,BTreeMap因为我不能添加状态到Ord特征.是否有一些技术我还没想到要做同等的事情?
编辑
我的例子中有一个拼写错误,使我无法意识到C++实际上并没有起作用.我正在重新评估这个问题.