gpt4 book ai didi

c++ - 我_可以_使用什么作为 std::map 键?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:43 25 4
gpt4 key购买 nike

Extends .

我有:

struct Coord{  int row, col ;  bool operator<( const Coord& other ) const  {    return row < other.row && col < other.col ;  }} ;

我正在尝试创建一个 map<Coord, Node*> ,您可以在其中查找 Node*通过 Coord .

问题是,它有错误。查找 map<Coord, Node*>通过 Coord正在返回错误的。

我很难确定这是否合适。

维基百科说,map [keys] requires a strict weak ordering .我做错了吗?有没有办法让它工作,或者 map 的键应该是可以“严格排序”的简单值?

基本上,问题是自定义 struct 需要什么?用作我的 std::map 的键?

最佳答案

是的,您很可能会遇到严格弱排序的问题。很可能它没有像您期望的那样工作。考虑:

  bool operator<( const Coord& other ) const
{
return row < other.row && col < other.col ;
}

obj1(这个)排:2列:3

对象2排:3列:2

对象 1 < 对象 2? => 错误

那好吧

对象 2 < 对象 1? => 错误

唯一的结论是它们必须相等(基于您的 < 运算符)。由于这是一张 map ,并且键是唯一的,因此两个键都指向同一个位置。这种行为可能不是您所期望的,但听起来很可能不是。

您需要的是在 row/col 之间设置优先级,以便 < 真正像您期望的那样工作:

  bool operator<( const Coord& other ) const
{
// look at row first, if row is equal, check column.
if (row < other.row)
{
return true;
}
else if (row == other.row)
{
return col < other.col ;
}
return false;
}

关于c++ - 我_可以_使用什么作为 std::map 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com