std::min_element 和 std::vector<Eigen::Vector2f>
std::min_element with std::vector<Eigen::Vector2f>
我试图找到最小元素如下:
#include <algorithm>
#include <iostream>
#include <vector>
#include <Eigen/Dense>
using namespace std;
template<typename T>
bool isLeftOf(const Eigen::Vector2<T>& a,
const Eigen::Vector2<T>& b) {
return (a.x() < b.x() || (a.x() == b.x() && a.y() < b.y()));
}
int main(int argc, char *argv[])
{
std::vector<Eigen::Vector2<float> > points;
points.push_back(Eigen::Vector2<float>(-1, -1));
points.push_back(Eigen::Vector2<float>(1, -1));
points.push_back(Eigen::Vector2<float>(0.5, 0));
points.push_back(Eigen::Vector2<float>(1, 1));
points.push_back(Eigen::Vector2<float>(0, 1.5));
points.push_back(Eigen::Vector2<float>(-1, 1));
points.push_back(Eigen::Vector2<float>(-0.7, 0));
Eigen::Vector2<float> outpointa = min_element(*points.begin(),
*points.end(), isLeftOf<float>);
return 0;
}
但是我得到编译器错误:
...\algorithm(9199):错误 C2675:一元“++”:“_FwdIt”未定义此运算符或预定义运算符可接受的类型的转换
和
[
_FwdIt=Eigen::Matrix
]
如何克服这个问题?
您需要为 min_element
提供迭代器
这样就可以了,不需要取消对迭代器的引用。
Eigen::Vector2<float> outpointa = min_element(points.begin(),
points.end(), isLeftOf<float>);
我试图找到最小元素如下:
#include <algorithm>
#include <iostream>
#include <vector>
#include <Eigen/Dense>
using namespace std;
template<typename T>
bool isLeftOf(const Eigen::Vector2<T>& a,
const Eigen::Vector2<T>& b) {
return (a.x() < b.x() || (a.x() == b.x() && a.y() < b.y()));
}
int main(int argc, char *argv[])
{
std::vector<Eigen::Vector2<float> > points;
points.push_back(Eigen::Vector2<float>(-1, -1));
points.push_back(Eigen::Vector2<float>(1, -1));
points.push_back(Eigen::Vector2<float>(0.5, 0));
points.push_back(Eigen::Vector2<float>(1, 1));
points.push_back(Eigen::Vector2<float>(0, 1.5));
points.push_back(Eigen::Vector2<float>(-1, 1));
points.push_back(Eigen::Vector2<float>(-0.7, 0));
Eigen::Vector2<float> outpointa = min_element(*points.begin(),
*points.end(), isLeftOf<float>);
return 0;
}
但是我得到编译器错误:
...\algorithm(9199):错误 C2675:一元“++”:“_FwdIt”未定义此运算符或预定义运算符可接受的类型的转换
和
[
_FwdIt=Eigen::Matrix
如何克服这个问题?
您需要为 min_element
提供迭代器这样就可以了,不需要取消对迭代器的引用。
Eigen::Vector2<float> outpointa = min_element(points.begin(),
points.end(), isLeftOf<float>);