我怎样才能让 min_element 以最低值捕获所有点?
Posted
技术标签:
【中文标题】我怎样才能让 min_element 以最低值捕获所有点?【英文标题】:How can I make min_element catch ALL points with the lowest value? 【发布时间】:2013-10-16 16:16:30 【问题描述】:我正在编写一个程序来使用graham scan 计算凸包的周长,并且需要在一组数据点中找到最低的 y 坐标。我在结构体point
中使用std::min_element(vector.begin(), vector.end())
和重载的<
运算符。问题是某些点可能共享相同的最低 y 坐标,在这种情况下,我需要使用它们的 x 值来比较它们。是否有任何快速作弊方法来检查是否有任何其他点与 min_element 共享相同的 y 而不必遍历所有内容?
结构:
struct cord
cord():x(0),y(0)
int x,y;
bool operator<(const cord &p) const return y < p.y;
;
typedef std::vector<cord>::iterator vecIter;
函数调用:
vecIter lowestPoint =
std::min_element(points.begin(), points.end());
std::cout << "the lowest point of the data set is: " << "(" <<
lowestPoint->x << "," << lowestPoint->y << ")" << std::endl;
【问题讨论】:
只需将operator<
更改为y
和x
中的std::tuple
或std::pair
,然后让它为您进行比较。
如果你绝对嫁给你的cord
对象类,在你的operator <()
中使用std::tie(x,y) < std::tie(p.x,p.y)
。
您是要查找最小值x
的最小值y
,还是查找具有最小值y
的所有点?您的标题指向后者,但您的问题正文指向前者。
【参考方案1】:
那么,就是这样吗? (替换您现有的operator<
函数)
bool operator<(const cord &p) const
if (y != p.y)
return y < p.y;
else
return x < p.x;
【讨论】:
以上是关于我怎样才能让 min_element 以最低值捕获所有点?的主要内容,如果未能解决你的问题,请参考以下文章
C++ 如果我对一个向量进行排序,我怎样才能让另一个向量与该向量对齐? [复制]