我怎样才能让 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&lt; 更改为yx 中的std::tuplestd::pair,然后让它为您进行比较。 如果你绝对嫁给你的cord对象类,在你的operator &lt;()中使用std::tie(x,y) &lt; std::tie(p.x,p.y) 您是要查找最小值x 的最小值y,还是查找具有最小值y 的所有点?您的标题指向后者,但您的问题正文指向前者。 【参考方案1】:

那么,就是这样吗? (替换您现有的operator&lt; 函数)

bool operator<(const cord &p) const

   if (y != p.y)
     return y < p.y;
   else
     return x < p.x;

【讨论】:

以上是关于我怎样才能让 min_element 以最低值捕获所有点?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 如果我对一个向量进行排序,我怎样才能让另一个向量与该向量对齐? [复制]

我怎样才能检查我是否在线程中捕获异常?

我怎样才能让导航栏按钮继续?

在 cmake 中,我怎样才能始终执行一个进程? (或从 add_custom_command 捕获标准输出)

我怎样才能让我的角色对角移动?

我怎样才能让 2 个 wavefilereader 依次播放?