c – 我用什么_can_作为std :: map键?
发布时间:2020-12-16 06:47:30 所属栏目:百科 来源:网络整理
导读:Extends. 我有: struct Coord{ int row,col ; bool operator( const Coord other ) const { return row other.row col other.col ; }} ; 我正在尝试创建一个地图 Coord,Node *,您可以在其中查找Coord的Node *. 问题是,它有错误.查找地图 Coord,Node * Coord
Extends.
我有: struct Coord { int row,col ; bool operator<( const Coord& other ) const { return row < other.row && col < other.col ; } } ; 我正在尝试创建一个地图< Coord,Node *>,您可以在其中查找Coord的Node *. 问题是,它有错误.查找地图< Coord,Node *> Coord正在回错. 我很难搞清楚这是否合适. 维基百科说,map [keys] requires a strict weak ordering.我做错了吗?有没有办法使它工作,或者地图的键是否可以“严格排序”的简单值? 基本上问题是自定义结构作为我的std :: map的键需要什么? 解决方法
是的,你很可能遇到严格弱序的问题.赔率是它没有像你期望的那样工作.考虑:
bool operator<( const Coord& other ) const { return row < other.row && col < other.col ; } obj1(这) OBJ2 obj1< obj2的? =>假 那么好吧: obj2< OBJ1? =>假 唯一的结论是它们必须相等(基于你的<运算符).由于这是一张地图,并且按键是唯一的,因此两个按键都会重新连接到同一个地点.这种行为可能或者可能不是你所期望的,但听起来可能不是. 你需要的是在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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |