STL总结

1.map

map可以任意定义 一一对应
比如map<string,int> string便是种类 ,int是string对应的
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。

	map<string,int>::iterator w=s.find(a);
			printf("%d\n",w->second);
//			printf("%d\n",s[a]);
比如w->second表示的就是这个string关键字的值

2.set

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
set<int>s;
int main()
{
	int i,j,k,m,n,t,h;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		scanf("%d",&m);
		if(n==1)
		s.insert(m);//插入一个数据m 
		if(n==2)
		s.erase(m);//删除m 
		if(n==3)
		{
//			h=s.find(m);
			if(s.find(m)!=s.end())//如果找不到m 那m就等于 end的值 好像是一个特别大的值 
			printf("Yes\n");
			
			else
			printf("No\n");
		}
	}
	return 0;
	
 }  

vector

我们定义一个vectorvik; 相当于定义一个一维数组 ;
vectorvik[1001];则相当于定义一个二维数组 起到了与邻接表相同的作用 ,

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>s;
int main()
{
   int i,j,k,m,n,t;
   scanf("%d",&t);
   for(i=1;i<=t;i++)
   {
   	scanf("%d",&n);
   	s.push_back(n);//插入一个数据n 
   }
   sort(s.begin(),s.end());//从头到尾排个序 从小到大
   for(i=0;i<s.size();i++)
   {
//		int h=s.top();
   printf("%d ",s[i]);
   }
   return 0;
   
   
}

删除数据

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,a,m,b,i;
	scanf("%d",&n);
	vector<int>s(n);
	for(i=0; i<n; i++)
		scanf("%d",&s[i]);
	scanf("%d",&m);
//	printf("*** %d\n",m);
	scanf("%d%d",&a,&b);
	s.erase(s.begin()+m-1);//删除第m个数 
	s.erase(s.begin()+a-1,s.begin()+b-1);//删除a到b之间的数 
	printf("%d\n",s.size());
	for(int i=0; i<s.size(); i++)
		printf("%d ",s[i]);
}

string

#include<string>
string a;
相当于char a【10010】
但是string只能用cout输出 且string可以之间判断 
比如 if(string(a)=="end")
这样使用可以不用strcmp
而且a.size()表示字符串的长度 可以用sort排序
#include<bits/stdc++.h>
using namespace std;
string a[1000];
bool cmp(string a,string b)
{
	return a.size()<b.size();
}
int main()
{
	int i,n;
	cin>>n;
	for(i=0;i<n;i++)
	cin>>a[i];
	sort(a,a+n,cmp);
	for(i=1;i<n;i++)
	{
		if(a[i].find(a[i-1])==a[i].npos)
		{
			printf("NO");
			return 0;
		}
	}
	printf("YES\n");
	for(i=0;i<n;i++)
	cout << a[i] <<endl;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值