c++ - 具有特征矩阵的 Stl 迭代器
问题描述
我有一些涉及 stl 迭代器的函数,并且适用于std::vector<Eigen::Vector2d>
. 例如:
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()
{
std::vector<Eigen::Vector2i> myVec;
myVec.push_back(Eigen::Vector2i::Random(2));
myVec.push_back(Eigen::Vector2i::Random(2));
myVec.push_back(Eigen::Vector2i::Random(2));
myVec.push_back(Eigen::Vector2i::Random(2));
myVec.push_back(Eigen::Vector2i::Random(2));
Eigen::Vector2i element = *std::min_element(myVec.begin(), myVec.end(), isLeftOf<int>);
return 0;
}
如您所见,std::vector<Eigen::Vector2i> myVec
我Eigen::Vector2<T>
在isLeftOf
调用std::min_element
.
现在我在使用时遇到了一些麻烦std::vector<SomeEigenType>
,我正在寻找一种使用相同isLeftOf(Eigen::Vector2...)
和 stl 函数的方法,但我不明白如何。
在Eigen 文档或论坛中,有一些信息如何在 Eigen::Vector 或 Matrix 上执行 stl 操作,但它们使用纯数字矩阵,所以我无法发送Eigen::Vector2
到我的isLeftOf
函数。
有没有办法Eigen::Matrix
在我的函数中使用 stl 函数并处理条件,比如isLeftOf
接受Eigen::Vector
类型?
解决方案
使用 Eigen 的主版本,您可以使用类似 STL 的迭代器来访问矩阵的行或列:
假设myVec
是一个矩阵,你可以这样写来得到“最左边”的列:
Eigen::Vector2i element = *std::min_element(
myVec.colwise().begin(), myVec.colwise().end(),
[](auto const& a, auto const& b){
return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());
});
Godbolt 演示:https ://godbolt.org/z/n1Y8hf
推荐阅读
- equality - 路径之间的平等
- django - pycharm django super().get_context_data(**kwargs) 有错误
- solidity - 配置松露`from`地址的最佳方法
- rx-java2 - RxJava 流转换
- python - 如何使用 Neupy 获得由神经元表示的点
- java - 在自定义 Keycloak SPI Authenticator 中处理用户的取消
- react-native - IOS 上的不透明边框颜色未正确呈现
- apache-kafka - 避免 kafka 磁盘成为 100% 被 Cron 作业使用
- java - 如何在 RecyclerView 中显示项目的条件?
- angular - 如何在角度使用chart.js