【发布时间】:2023-03-22 14:17:01
【问题描述】:
我正在尝试为 std::map 实现我自己的键比较器,如下所示:
auto cost_compare = [](const OffsetCoords& left, const OffsetCoords& right) {
return (left == right); };
std::map<OffsetCoords, int, decltype(cost_compare)> cost_so_far(cost_compare);
其中OffsetCoords 是结构体,x、y 值的向量,带有重载的operator==
代码构建良好,但是当我调用 cost_so_far.count(some_offsetcoords_variable) 时,它会抛出异常“表达式:无效比较器”。
这样做的正确方法是什么?
【问题讨论】:
-
地图需要小于。
-
此问题不符合minimal reproducible example的要求,因此无法回答。
-
@RichardCritten:实际上并没有。使用小于运算符是提供二元谓词的一种简单方法,因为默认情况下使用
std::less<Key>。您可以使用其他二元谓词。但是,使用的谓词必须实现严格的弱顺序。在数学中,用于表示规范严格弱序的符号恰好是<。在谓词的选择很重要的情况下,可以使用不同的符号,例如,当可以使用任何合适的严格弱顺序时,该符号通常是一个圆圈内的小于。
标签: c++