我需要创建std::map<cv::Point, double>
。 cv::Point
是OpenCV库中的一种点。它包含以下字段:x
和y
。
cv::Point
当然没有<
运营商。您是否知道如何定义它以便在std::map
?
换句话说。我有例如20000点。我需要快速访问每一点。
例如:
std::map<cv::Point, double> myMap;
Point p(10, 234);
int value = 777;
myMap[p] = value; // I need this operation quite fast so I decided to use std::map
但是cv :: Point没有<
运算符。我可以准备<
运算符(它仅比较x坐标):
bool operator<(const cv::Point a, const cv::Point b)
{
return a.x < a.x;
}
但我想这不是好运营商。许多点具有相同的x值。
在这种情况下如何准备有效的操作员?
答案 0 :(得分:8)
根据this documentation,cv::Point
表示二维数据点。为此,您可以通过标准词典排序来定义运算符<
:
bool operator<(cv::Point const& a, cv::Point const& b)
{
return (a.x < b.x) || (a.x == b.x && a.y < b.y);
}
编辑:正如您考虑使用unordered_map
:尽管在这里可能更合适,但实现起来要复杂一些,因为您必须将x
和{的两个哈希值组合在一起{1}}。为此,你可以使用y
或自己找出合理的东西,但你会发现它变得更复杂。