cpp,对std::vector<cv::Point2i>按照先对行排序,行数相同的对列排序。编写也给函数实现这个功能
时间: 2024-09-10 07:03:09 浏览: 38
可以使用 C++ STL 中的 sort() 函数以及自定义的比较函数实现按行排序的功能,同时根据行数相同的情况,对列进行排序。以下是一个可能的实现方法:
```cpp
#include <vector>
#include <algorithm>
#include <cmath>
// 自定义比较函数,用于按照行数和列进行排序
bool compare(const std::vector<cv::Point2i>& a, const std::vector<cv::Point2i>& b) {
// 先按照行数进行排序
if (a.size() != b.size()) {
return a.size() < b.size();
}
// 如果行数相同,再按照列进行排序
else {
for (int i = 0; i < a.size(); i++) {
if (a[i].x != b[i].x || a[i].y != b[i].y) {
return a[i].x < b[i].x || (a[i].x == b[i].x && a[i].y < b[i].y);
}
}
}
return false; // 默认升序排序,也可以修改为降序排序
}
void sortVectorByRowsAndColumns(std::vector<std::vector<cv::Point2i>>& vec) {
// 先对整个 vector 进行排序
std::sort(vec.begin(), vec.end(), compare);
// 对排序后的 vector 中的每个子向量按照列进行排序
for (int i = 0; i < vec.size(); i++) {
std::sort(vec[i].begin(), vec[i].end());
}
}
```
这个函数接受一个 `std::vector<std::vector<cv::Point2i>>` 类型的参数,表示一个二维向量,并对其进行排序。排序规则是先按照行数进行排序,如果行数相同,再按照列进行排序。注意这里使用了一个自定义的比较函数 `compare()`,用于定义排序规则。可以根据需要修改比较函数以实现不同的排序规则。另外,需要注意的是,在实现中对 `cv::Point2i` 的比较是按照坐标值进行的,所以当 `cv::Point2i` 中的 x 和 y 属性相差过大时可能会导致排序不准确。可以通过设置适当的范围阈值来解决这个问题。
阅读全文