【C++积累】leetcode刷题中常用到的函数、知识积累(更新ing)
stoi()函数
stoi()中放入(string)类型的参数,可以把string转换成int类型
a = stoi("1.324"); //a = 1
to_string()函数
to_string()函数将数值类型的参数转化为string类型
istringstream类
其构造函数原型如下,需要包含头文件#include <sstream>
:
// istringstream::istringstream(string str);
#include<iostream>
#include<sstream> //istringstream 必须包含这个头文件
#include<string>
using namespace std;
int main()
{
string str="i am a boy";
istringstream is(str);
string s;
while(is>>s)
{
cout<<s<<endl;
}
}
输出:
i
am
a
boy
这个函数按照空格划分访问的string部分
string类型删除元素
s.erase(index, num)
删除index位置开始的num个元素
vector去除重复元素
vector<int> vec(10,1);
set<int> s(vec.begin(),vec.end());
vec.assign(s.begin(), s.end());
map排序问题
这一部分参考自:https://blog.csdn.net/gaoqiandr/article/details/127172792
map内部构造用到红黑树,默认按照键升序;想要改变排序可以通过以下方法。
增加排序规则,使map按照键值降序排列
struct rule{
bool operator()(string a,string b){
return a>b;//对于键是string型按照从大到小排
}
};
int main()
{
//map中的第三个参数其实就是排序规则,之前不写就会默认成默认排序
map<string,int,rule>m;
m["asas"]=199;
m["zx"]=99;
m["gsgus"]=878;
m["yuy"]=1515;
map<string,int,rule>::iterator it;
for(it=m.begin();it!=m.end();it++){
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}
key是结构体情况下的排序
typedef struct{
string name;
int score;
}node;
struct rule{
bool operator()(node a,node b){
if(a.score==b.score){
return a.name>b.name;
}
return a.score>b.score;
}
//排序规则是按照成绩大的在前面,相同按照名字降序
};
int main()
{
node stu;
map<node,int,rule>m;
stu.name="abc";
stu.score=88;
m[stu]=1212;
stu.name="acd";
stu.score=88;
m[stu]=1213;
stu.name="bcbc";
stu.score=100;
m[stu]=1214;
stu.name="zzzzzz";
stu.score=1000;
m[stu]=8989;
map<node,int,rule>::iterator it;
for(it=m.begin();it!=m.end();it++){
cout<<"名字="<<it->first.name<<" 成绩="<<it->first.score<<" 学号="<<it->second<<endl;
}
return 0;
}
map按照value值进行排序
在map中的排序是基于按照key来排序的,所以无法对value直接进行排序,如果想对value进行排序,需要用到vector容器以及sort函数。
bool cmp(const pair<string,int> a,pair<string,int>b){
return a.second>b.second;
}
int main()
{
map<string,int>m;
m["asas"]=18;
m["ioio"]=90;
m["cj"]=89;
vector<pair<string,int>>v(m.begin(),m.end());
sort(v.begin(),v.end(),cmp);
map<string,int>::iterator it;
for(int i=0;i<v.size();i++){
cout<<v[i].first<<" "<<v[i].second<<endl;
}
return 0;
vector重载了'=='运算符
可以通过==
判断两个vector容器的元素是否相等
vector<int> v1(10,1);
vector<int> v2(10,1);
if(v1 == v2){
return true;
}