sort排序规则 - 最全

1. 结构体外部定义排序规则

#include 
#include 
#include 
using namespace std;
struct node
{
    int x;
};
bool cmp(node e1, node e2)
{
    /*
    1. 小于是小到大 升序
    2. 大于是大到小 降序
    */
    return e1.x < e2.x;
}
int main()
{
    node a[2];
    a[0].x = 1;
    a[1].x = 2;
    sort(a, a + 2, cmp);
    cout << a[0].x << endl
         << a[1].x;
         
    return 0;
}

2. 结构体内部的排序规则

#include 
#include 
#include 
using namespace std;
struct node
{
    int x;
    bool operator<(const node e) const
    {
        /*
        1. 把原始的放前面
        2. 小于是小到大 升序
        3. 大于是大到小 降序
        */
        return x < e.x;
    }
};
int main()
{
    node a[2];
    a[0].x = 1;
    a[1].x = 2;
    sort(a, a + 2, cmp);
    cout << a[0].x << endl
         << a[1].x;

    return 0;
}

3. 优先队列的排序规则

和上面的正好相反

#include 
#include 
#include 
using namespace std;
struct node
{
    int x;
    bool operator<(const node e) const
    {
        /*
        1. 把原始的放前面
        2. 大于是小到大 升序
        3. 小于是大到小 降序
        */
        return x < e.x;
    }
};
int main()
{
    priority_queue<node> p;
    p.push({1});
    p.push({3});
    p.push({2});
    while (!p.empty())
    {
        cout << p.top().x << endl;
        p.pop();
    }
    return 0;
}

4. tie排序规则

#include 
#include 
#include 
using namespace std;
int main()
{
	int a[5] = {1, 2, 3, 4, 5};
	auto cmp = [](int e1, int e2) {
		//递减第二个放前面
		//递增第一个放前面
		return tie(e2) < tie(e1);
	};
	sort(a, a + 5, cmp);
	for (auto e : a)
		cout << e << ' ';
	return 0;
}

你可能感兴趣的:(有用的笔记和函数)