如何删除vector<point>中的x相等元素中y较小的元素
时间: 2024-05-03 08:16:54 浏览: 88
可以使用 `std::sort` 函数对 `vector<point>` 进行排序,排序规则是先按照 x 值升序排列,对于 x 相等的元素,再按照 y 值升序排列。然后遍历排序后的 `vector<point>`,对于每个 x 值相等的元素,保留 y 值最大的元素,其余的都删除即可。
以下是示例代码:
```c++
struct point {
int x;
int y;
};
bool cmp(const point& a, const point& b) {
if (a.x == b.x) {
return a.y > b.y; // x 相等时,按照 y 值从大到小排列
}
return a.x < b.x; // x 不相等时,按照 x 值从小到大排列
}
void delete_x_equal_smaller_y(vector<point>& vec) {
sort(vec.begin(), vec.end(), cmp); // 对 vector<point> 排序
int i = 0;
while (i < vec.size()) {
int j = i + 1;
while (j < vec.size() && vec[j].x == vec[i].x) {
j++;
}
// 保留 y 值最大的元素,删除其余元素
int max_y = vec[i].y;
for (int k = i + 1; k < j; k++) {
if (vec[k].y < max_y) {
vec.erase(vec.begin() + k);
k--;
j--;
} else {
max_y = vec[k].y;
}
}
i = j;
}
}
```
使用示例:
```c++
int main() {
vector<point> vec = {{1, 2}, {3, 5}, {2, 1}, {3, 2}, {2, 5}};
delete_x_equal_smaller_y(vec);
for (const auto& p : vec) {
cout << "(" << p.x << ", " << p.y << ")" << endl;
}
return 0;
}
```
输出结果:
```
(1, 2)
(2, 5)
(3, 5)
```
阅读全文