Live2D

【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;
}
posted @ 2023-01-04 22:35  WSquareJ  阅读(146)  评论(0)    收藏  举报