C++ 为什么找不到此std::map键?
我以前问过一次,现在我有一个相关的问题。下面,输出为“未找到”,打印的元素数为2 直线C++ 为什么找不到此std::map键?,c++,C++,我以前问过一次,现在我有一个相关的问题。下面,输出为“未找到”,打印的元素数为2 直线位置。安放(r,q)清楚地插入元素,并且映射大小正确,那么为什么找不到rp(本例中未记录) #包括 #包括 结构屏幕点{ 浮动x=0,y=0; 屏幕点(浮动x,浮动y):x{x},y{y}{ }; 布尔运算符您的运算符您的比较运算符 bool operator<(const screenPoint& left, const screenPoint& right){ return lef
位置。安放(r,q)
清楚地插入元素,并且映射大小正确,那么为什么找不到r
<找到代码>p(本例中未记录)
#包括
#包括
结构屏幕点{
浮动x=0,y=0;
屏幕点(浮动x,浮动y):x{x},y{y}{
};
布尔运算符您的运算符您的比较运算符
bool operator<(const screenPoint& left, const screenPoint& right){
return left.x<right.x||left.y<right.y;
}
我在另一个问题中提出的解决办法似乎是不够的。对于这样一个简单的数据结构,如何提供一个好的操作符?==如果我使用浮点数,则不是一个好的解决方案。这也在我的链接的其他问题中提到过。@krzaq如果std::tie仅仅创建一个元组,那么标准是否会自动实现这个操作符操作符或者在std::map
中输出这些操作符隐式地取决于两个浮点数的相等性。运算符在我的另一个问题中,我使用了&&并且它也不起作用@JeromeBaldridge更新了。因为有两个成员,它变得更复杂。因为tie只创建了一个引用元组,所以这个结果元组会自动创建一个好的操作符吗?@JeromeBaldridge是的。它很好地使用了操作符,iOS中的接触点以像素坐标表示为浮点,许多确实是分数。
bool operator<(const screenPoint& left, const screenPoint& right) {
return left.x < right.x ||
( left.x == right.x && left.y < right.y );
}
bool operator<(const screenPoint& left, const screenPoint& right){
return left.x<right.x||left.y<right.y;
}
bool operator<(const screenPoint& left, const screenPoint& right){
return std::tie(left.x, left.y) < std::tie(right.x, right.y);
}