结构体重载运算符
struct student {
string name;
int score;
//重载为成员函数,分数从小到大排序,当分数相等时,按名字从大到小排序(字典序)
bool operator<(const student& a) const {
return score < a.score || (score == a.score && name > a.name);
// 上面省略了 this 指针,完整表达式如下:
// this->score<a.score||(this->score==a.score&&this->name>a.name);
}
};
上面的代码将小于号重载为了成员函数,当然重载为非成员函数也是可以的。
struct student {
string name;
int score;
};
//当优先队列存储的元素类型是自定义的结构体类型时,因为priority_queue默认是大根堆,所以要反过来重载
//即下面是按照分数从大到小排序,分数相同时,按名字的字典序从小到大排序
bool operator<(const student& a, const student& b) {
return a.score < b.score || (a.score == b.score && a.name > b.name);
}
priority_queue<student> q;
欧几里得公式
__gcd(x,y);//返回两个数的最大公约数,注意是两条下划线
哈希表
哈希表定义必须在int函数内
auto 关键字
for(auto it :a)
1,遍历容器a,将容器a的值赋给it,修改it,a容器值不会变.
2,当容器中有多个值,it.first表示第一个值,it.second 表示第二个值
unordered_map<string, int> h;
h["abc"] = 1, h["abcd"] = 2;
for (auto it : h)
cout << it.first << ' ' << it.second;
//输出:abc 1 abcd 2
for(auto &it :a)
加了引用符号,对it的修改,容器a中的值跟着修改
for (auto &it : a)
it += 10;
for (int i = 0; i < 4; i++)
cout << a[i] << ' ';
//输出 11 11 11 11
unique去重函数:
将有序的一堆数去重(所以要先排序),重复的数放在数组后面,返回有序的数组的尾地址。左闭右开
unique(a,a+n);第一个参数是容器的起始地址,第二个参数是容器的最后一个元素的下一个元素的地址
int len=unique(a,a+n)-a;len为去重后数组长度
int a[4]={3,2,2,1};
sort(a,a+4);
int len=unique(a,a+4)-a;
for(int i=0;i<len;i++) cout<<a[i]<<' ';`
//输出 1 2 3