一.string
1.代码演示
string str1="hello";
char str2[ ]="world";
string str3;
str3.push_back('!');
//hello world!
count << str1 << " " << str2 << str3 << endl ;
从上面的代码我们能大概知道string的用法。
2.string的常见操作
string str = "hello";
str.length(); str.size(); //O(n)
str.insert(1,"aaa"); //在下标为1处插入一个字符或字符串 O(1)
str.insert(str.begin(),'a'); //在迭代器处插入一个字符或字符串 O(n)
str.c_str(); //返回C语言字符串,用于printf O(n)
str.append(str2); //把str2拼接到str后面
str.compare(str2); //strcmp(str,str2)
str==str2; //strcmp(str,str2)==0;
str+=str2; //str.append(str2);
str+='a' ; //str.push_back('a');
3.注意
c++中,string类型可以直接通过cin输入,但不能以scanf(“ %s ”,str)的方式读入。
如果要使用scanf读入,可以通过scanf读入字符数组后,将字符数组转换成string类型。
string a;
char ch[100];
scanf("%s,ch);
a=string(ch);
cout<<a<<endl;
二.map
map是一类关联式容器。可以理解为 以任意数据类型为下标 的超级数组。使用时需要用头文件
#include <map>
1.初始化
map<键的数据类型,值的数据类型>变量名
2.map添加元素的方式
变量名[键]=值
3.代码演示
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<string,int>data;
data["Ganten"]=7;
cout<<data["Ganten"]<<endl;//7
return 0;
}
4.遍历
map也可以通过迭代器的方式进行遍历。
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string,int>data;
data["Ganten"]=7;
data["嘉佳"]=6;
for(map<string,int>::iterator it=data.begin();it!=data.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}
运行结果:
嘉佳 6
Ganten 7
map在STL中是有序的,map的访问添加时间复杂度都是O(nlogn)。
有些题目卡时间,就要用到unordered_map,它的访问添加时间复杂度都是O(1)。
除了初始化时写成unordered_map<键类型,值类型>变量名外,其他的操作都是一样的。
三.pair
pair是c++里内置的一种结构体,里面只有两个first和second。除了定义时和普通结构体不一样以外,其他的操作是一样的。
1.定义格式:
pair<键的数据类型,值的数据类型>p;
#include<iostream>
using namespace std;
int main()
{
pair<int,double>p;
p.first=1;
p.second=2;
cout<<p.first<<endl;
cout<<p.second<<endl;
return 0;
}
其实map就是一个储存pair的容器。因此map的添加也可以通过insert一个pair来添加。
map<string,int>data;
data["星期天"]=7;
data["星期六"]=6;
data.insert(pair<string,int>("星期五",5));
四.algorithm库
1.sort快速排序
作用:使指定容器范围内的元素有序。默认从小到大排序。
sort(开始位置指针,结束位置指针);左闭右开
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[]={5,9,6,3,7,8};
int n=6;
int i;
sort(a,a+n);
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
//3 5 6 7 8 9
sort排序可以通过重载小于号运算符来自定义排序规则
stuct st{
int A_score;
int B_score;
bool operator < (const st b){甲乙
if (this->A_score!=b.A_score) return this->Ascore < b.Ascore;
return this->B_score < b.B_score;
}
};//如果甲乙A成绩不相等,就比较甲乙的B成绩
2.min(a,b);返回两个元素值中的较小值
max(a,b); 返回两个元素值中的较大值
next_permutation( a.begin(),a.end() );//生成给定范围组成的下一个按字典序的排列
per_permutation( a.begin(),a.end() );//生成给定范围组成的下一个按字典序的排列
希望下面这张图能对大家理解字典序有帮助
vector在我上一篇博客讲过了,有兴趣的可以看一下
c++ vector