STL
sort()
1.对数组内元素进行排序
int a[] = {1,5,3,2};
sort(&a[0],&a[sizeof(a)/sizeof(int)]);
for(int i=0;i<4;i++){
cout<<a[i]<<' ';
}
输出:1 2 3 5
2.以一定规则排序(使用C++自带的)
double a[] = {1,5,3,2};
sort(&a[0],&a[sizeof(a)/sizeof(double)],greater<double>()); //从大到小排序
//less<double>()为从小到大排序。默认从小到大。
for(int i=0;i<4;i++){
cout<<a[i]<<endl;
}
输出:5 3 2 1
3.用函数自定义排序规则
bool cmp(int a,int b){ //定义用个数位的大小升序排序
a = a%10;
b = b%10;
return a<b;
}
//return a>b; //个位数大小降序输出
int main(){
int a[] = {11,55,37,26};
sort(&a[0],&a[sizeof(a)/sizeof(int)],cmp);
for(int i=0;i<4;i++){
cout<<a[i]<<endl;
}
}
输出:11 55 26 37
//输出:37 26 55 11
class stu{
public:
string name;
int id;
double gpa;
};
bool cmp(stu s1,stu s2){ //对class(或struct)中的id从小到大排序
return s1.id<s2.id;
}
int main(){
stu students[] = {{"jack",3,88.8},{"macllo",12,99.23},{"kally",1,80}};
sort(&students[0],&students[sizeof(students)/sizeof(stu)],cmp);
for(int i=0;i<sizeof(students)/sizeof(stu);i++){
cout<<students[i].name<<endl;
}
}
输出:kally jack macllo
binary_search()
1.对“有序”序列进行二分查找(因为只有有序才能二分查找)
用法:二分法若查到此数据,则返回1,没有查到返回0.
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[] = { 12,45,8,98,21,7};
sort(a,a+6,cmp);
cout <<"result:"<< binary_search(a,a+6,8) << endl;
cout <<"result:"<< binary_search(a,a+6,8,cmp) << endl;
/*
注意:之所以输出一个为0另一个为1,是由于sort过的数组按从大到小的顺序排列,
而binary_search()默认为对从小到大序列查找,故第一个二分查找失败。
所以,如果用自定义规则排序,则在binary_search()里也要加上规则函数。
*/
return 0;
}
输出:
result:0
result:1
2.同理也可查找class或struct
lower_bound()
二分查找下界,查找区间里下标最小的,大于等于"值" 的元素
查找的值存在,得到等于值的指针
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[] = { 12,45,20,8,21,7};
sort(a,a+6,cmp);
//排序后:45、21、20、12、8、7
int* result_low = lower_bound(a,a+6,8,cmp); //所查找的值存在时
cout << *result_low << endl;
return 0;
}
输出:8
查找的值不存在,得到大于“值”的指针
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[] = { 12,45,20,8,21,7};
//排序后:45、21、20、12、8、7
sort(a,a+6,cmp);
int* result_low = lower_bound(a,a+6,14,cmp); //所查找的值不存在
cout << *result_low << endl;
return 0;
}
输出:12
upper_bound()
二分法查找上界,查找区间里下标最小的,大于"值"的元素。
不论所查找的值是否存在,都得到大于“值”的元素的指针
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[] = { 12,45,20,8,21,7};
//排序后:45、21、20、12、8、7
sort(a,a+6,cmp);
int* result_up = upper_bound(a,a+6,12,cmp); //所查找值存在
cout << *result_up << endl;
return 0;
}
输出:8
bool cmp(int a,int b){
return a>b;
}
int main(){
int a[] = { 12,45,20,8,21,7};
//排序后:45、21、20、12、8、7
sort(a,a+6,cmp);
int* result_up = upper_bound(a,a+6,14,cmp); //所查找值不存在
cout << *result_up << endl;
return 0;
}
输出:12
vector
需要 #include <vector>
功能:动态数组
class stu{
public:
string name;
int id;
double gpa;
};
int main(){
vector<stu> a;
stu b = {"bob",2,87.2};
a.push_back(b); //
cout << a.at(0).name<<endl;
b = {"killy",12,100.1};
a.push_back(b);
cout << a[1].gpa <<endl;
/*
a.at(1)
a[1]
均可
*/
return 0;
}
输出:bob 100.1
最后更新于
这有帮助吗?