C++自定义排序/比较
lambda自定义排序
一维数组
从小到大排序
vector<int> a({4, 8, 1, 5, 3, -1});
sort(a.begin(), a.end(), [](int a, int b){return a < b;});
for (int n: a) {cout << n;};
二维数组
第二个数字从小到大排序
vector<vector<int>> a({{4, 8}, {1, 2}, {3, 9}, {-1, -1}});
sort(a.begin(), a.end(), [](vector<int> a, vector<int> b){return a[1] < b[1];});
for (vector<int> n: a) {cout << n[0] << " " << n[1] << endl;};
定义函数
bool cmp(vector<int> a, vector<int> b) {
return a[1] < b[1];
}
vector<vector<int>> a({{4, 8}, {1, 2}, {3, 9}, {-1, -1}});
sort(a.begin(), a.end(), cmp);
for (vector<int> n: a) {cout << n[0] << " " << n[1] << endl;};
自定义比较
如下代码所示,以pair的第二个数从大到小排列
bool operator<pair<int, int> p1, pair<int, int> p2) {
return p1.second < p2.second;
}
bool ans = p1 < p2;
cout << ans;
priority_queue的自定义排序
struct Comp {
bool operator() (pair<int, int> a, pair<int, int> b) {
return a.second < b.second;
}
};
int main()
{
pair<int, int> a(1, 1), b(-1, 5), c(3, 2);
priority_queue<pair<int, int>, vector<pair<int, int>>, Comp> q;
q.push(a);
q.push(b);
q.push(c);
while (!q.empty()) {
cout << q.top().first << " " << q.top().second << endl;
q.pop();
}
return 0;
}
输出:
-1 5
3 2
1 1
auto cmp = [](int a, int b) -> bool { return a < b; };
priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
pq.push(0);
pq.push(1);
cout << pq.top() << endl;
输出
1