signed main(int argc, char** argv) 是什么意思

刚开始学C++,做题看题解的时候遇到一个不懂的代码,希望各位能教教我。代码如下:

#include <bits/stdc++.h>
#define int long long

using namespace std;

pair<pair <char,int>,int> a[500005];
int ans[500005];

signed main(int argc, char** argv)
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin >> T;
    while(T--)
    {
        int n;
        cin >> n;
        for(int i=1;i<=n;i++)
                    cin >> a[i].first.second;
        for(int i=1;i<=n;i++)
                    cin >> a[i].first.first;
        for(int i=1;i<=n;i++)
                    a[i].second=i;

        sort(a+1,a+n+1);

        for(int i=1;i<=n;i++)
                    ans[a[i].second]=i;
        for(int i=1;i<=n;i++)
            cout << ans[i] << " ";
        cout << "\n";
    }
    return 0;
}

主要是想知道:
1、signed main(int argc, char** argv) 是什么意思呀
2、ios::sync_with_stdio(false);
cin.tie(0);
这两行又是什么呀?是必须的吗?
3、看到题解后,我补充了一点的 pair<> 知识,所以想知道 sort() 是按照哪个对象进行的从小到大排序哇?

main函数啊,程序入口函数
https://www.jb51.net/article/231543.htm
https://blog.csdn.net/king9666/article/details/103949090
https://blog.csdn.net/qian2213762498/article/details/81773289

(1)signed main(int argc, char** argv) 这句话,signed表示返回值是有符号数,argc表示命令行参数的个数(含程序名),argv是参数字符串数组(argv[0]是程序名)
(2)ios::sync_with_stdio(false);cin.tie(0);
这段语句可以来打消iostream的输入 输出缓存,可以节省许多时间,主要用来提升输入输出效率,一般可以省略。
(3)pair排序的时候,用key来排序,这个代码中是双层pair,所以最后用char这个字段来排序。

img

定义主函数,返回值是一个无符号整形,argc是参数个数,argv是参数数组,可以多个参数。

signed main(int argc, char** argv)