小编jsa*_*usk的帖子

是否有相当于BTreeMap的C++比较器对象和依赖Ord的其他东西?

我似乎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++实际上并没有起作用.我正在重新评估这个问题.

c++ floating-point rust data-structures

1
推荐指数
1
解决办法
203
查看次数

标签 统计

c++ ×1

data-structures ×1

floating-point ×1

rust ×1