在 C++ 中对向量进行排序
sort a pair vector in c++
#include "bits/stdc++.h"
using namespace std;
int main()
{
int i,j;
vector< pair<int,int> > v;
v.push_back(make_pair(4,2));
v.push_back(make_pair(1,3));
v.push_back(make_pair(5,4));
sort(v.begin(), v.end());
for(i=0;i<v.size();i++)
cout<<v[i].first<<" "<<v[i].second<<endl;
}
上述代码的输出为---
1 3
4 2
5 4
我们可以从输出中看到排序函数已经对 v[i].first 进行了排序,但是如果我们只想对 v[i].second 进行排序,或者如果我们想要对它们进行排序,那么如何完成任务呢?
指定自定义比较器。在 C++14 中,可以非常简洁地完成:
sort(v.begin(), v.end(), [](const auto& x, const auto& y){return x.second < y.second;});
std::sort()
函数接受比较函数对象作为参数:
template<class RandomIt, class Compare> void sort(
RandomIt first, RandomIt last, Compare comp);
pair
second
成员的工作比较函数是:
bool cmp(const std::pair<int,int>& a, const std::pair<int,int>& b) {
return a.second < b.second;
}
默认情况下,
它会像程序一样根据第一个元素进行排序。但是,您可以传递第三个参数作为您定义的比较器进行排序,以执行您想做的任何事情......
您可以拥有自己的比较器来对正确的元素进行排序:-
struct sort_second {
bool operator()(const std::pair<int,int> &left, const std::pair<int,int> &right) {
return left.second < right.second;
}
};
std::sort(v.begin(), v.end(), sort_second());
相关文章:
- 计算排序向量的向量中唯一值的计数
- 查找两个排序向量中共有的元素
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 对象接收堆栈溢出异常 c++ 的排序向量
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 指向指针排序向量的指针向量的 C++ 向量
- 未排序向量上的lower_bound/upper_bound
- 智能指针的排序向量:神秘崩溃
- 按类型排序向量并按类型或派生类型搜索
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 字符串指针的排序向量
- 具有前导数字的字符串的排序向量
- 保证重新排序向量
- 结构解释的C 排序向量
- 更新排序向量的一个条目
- 通过在排序向量上使用二叉搜索来定位未排序向量中的元素
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 使用QuickSort算法以降序排序向量