【问题标题】:Lambda key comparator for map [closed]地图的 Lambda 键比较器 [关闭]
【发布时间】: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&lt;Key&gt;。您可以使用其他二元谓词。但是,使用的谓词必须实现严格的弱顺序。在数学中,用于表示规范严格弱序的符号恰好是&lt;。在谓词的选择很重要的情况下,可以使用不同的符号,例如,当可以使用任何合适的严格弱顺序时,该符号通常是一个圆圈内的小于。

标签: c++


【解决方案1】:

用于std::map&lt;Key, Value, Comp&gt; 的二元谓词Comp 需要在Key 类型的对象上实现strict weak orderstrict 指的是comp(x, x) 为所有与Comp 一起使用的Key 类型的对象产生false。对于您定义的谓词 不是 的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多