C++ std::min_元素与std::vector<;本征::矢量2f>;

C++ std::min_元素与std::vector<;本征::矢量2f>;,c++,eigen3,C++,Eigen3,我试图找到min元素,如下所示: #包括 #包括 #包括 #包括 使用名称空间std; 样板 布尔isLeftOf(常数特征::矢量2&a, 常数本征::矢量2和b){ 返回(a.x()*min\u元素xxx.begin()是一个迭代器。取消对该迭代器的引用(通过使用*)将为您提供元素。标准算法不需要元素。他们需要迭代器或范围。@milleniumbug,@Fureeish实际上没有*我得到一个错误:main.cxx:103:25:errors:没有从“std::\u Vector\u iter

我试图找到min元素,如下所示:

#包括
#包括
#包括
#包括
使用名称空间std;
样板
布尔isLeftOf(常数特征::矢量2&a,
常数本征::矢量2和b){
返回(a.x()
但我发现编译器错误:

…\algorithm(9199):错误C2675:一元“++”:“\u FwdIt”未定义此运算符或到预定义运算符可接受的类型的转换 具有 [ _FwdIt=特征::矩阵 ]


如何克服这个问题?

您需要为minu元素提供迭代器

这样就可以了,无需取消对迭代器的引用


Eigen::Vector2<float> outpointa = min_element(points.begin(),
                                                points.end(), isLeftOf<float>);

特征::矢量2输出点A=最小元素(points.begin(),
points.end(),isLeftOf);

std::min_元素
接受一系列迭代器。那里的
*
有什么用?
*points.begin(),*points.end()
->
points.begin(),points.end()
&
min\u元素
->
*min\u元素
xxx.begin()
是一个迭代器。取消对该迭代器的引用(通过使用
*
)将为您提供元素。标准算法不需要元素。他们需要迭代器或范围。@milleniumbug,@Fureeish实际上没有
*
我得到一个错误:main.cxx:103:25:errors:没有从“std::\u Vector\u iterator”到“Eigen::Vector2”(又名“Matrix”)的可行转换Matrix.h:273:5:注意:候选构造函数不可行:没有已知的从“std::_Vector_iterator”的转换帮你一个忙:在这种情况下,关键字
auto
是你的朋友:
auto outpointa=min\u元素(points.begin(),points.end(),isLeftOf)如果你有一个足够好的基于C++的编辑器,你会看到那个<代码> Auto <代码>实际上是什么。谢谢你,保罗。编译器为我提供了以下类型:
std::\u Vector\u iterator
。太复杂了。。。它能以某种方式简化吗?如果我删除
*
,那么我就不能将表达式的结果赋给
Eigen::Vector2 outpointa
。我在commentsuse auto outpointa=min_元素(*points.begin(),*points.end(),isLeftOf)中遇到上述错误;