vector<int,int> 排序
时间: 2025-03-09 14:03:44 浏览: 35
### 关于 `std::vector<std::pair<int, int>>` 排序的方法
对于包含 `std::pair<int, int>` 类型元素的向量,可以利用自定义比较函数来实现特定需求下的排序逻辑。默认情况下,`std::pair<T1, T2>` 的比较操作会先基于第一个成员 (`first`) 进行升序排列;如果两个对象的第一个成员相等,则继续依据第二个成员 (`second`) 来决定顺序。
当调用 `std::sort()` 函数时,可以通过传递第三个参数指定不同的比较方式:
#### 使用 Lambda 表达式作为比较器
```cpp
#include <iostream>
#include <utility> // std::pair
#include <algorithm> // std::sort
#include <vector>
int main() {
std::vector<std::pair<int, int>> vec = {{3, 9}, {1, 8}, {4, 7}};
// 默认按 first 成员从小到大排序,若相同则按 second 成员排序
std::sort(vec.begin(), vec.end());
// 自定义 lambda 比较器:按照 pair.second 升序排序
std::sort(vec.begin(), vec.end(),
[](const std::pair<int,int>& lhs,
const std::pair<int,int>& rhs){
return lhs.second < rhs.second;
});
for(auto& p : vec) {
std::cout << "(" << p.first << ", " << p.second << ") ";
}
}
```
上述代码展示了如何通过提供一个 lambda 表达式的比较器来自定义排序行为[^1]。此例子中,首先演示了标准库提供的默认排序机制,接着实现了根据 `pair` 对象中的 `second` 值来进行升序排序的功能。
此外,在某些场景下可能还需要访问底层数据指针以便更高效的操作或者与其他 API 配合工作,这时就可以借助 `std::vector::data()` 方法获取指向内部数组起始位置的原始指针[^2]。
为了进一步扩展功能或简化复杂的数据结构处理过程,还可以考虑使用其他容器适配器如 `std::tuple` 或者可选类型 `std::optional` 等工具类模板[^3]。
阅读全文
相关推荐


















