map、string常用功能

map

map(映射):它可以将任何基本数据类型【键 key】映射到任何基本数据类型【值 value】(包括STL),常用到的就是建立string型到int型的映射。map在建立映射的过程中会自动去重,同时按key从小到大的排序功能(set也是)。
另外:STL中,string和vector可以使用*(it+i)的访问方式,其他容器迭代器只能使用自加或自减的方式枚举

经常用来判断某个元素是否出现过
可以用count()函数判断,它会返回某元素的个数(0/1);
也可以直接访问map[key],但是当判断的元素key不存在时,它会自动先创建一个key到零的映射。

举个栗子:题目链接
代码:

#include <iostream>
#include<map>
using namespace std;
int main()
{
    int n,m,com=0;
    string str;
    map<string,int>mp;
    scanf("%d%d",&n,&m);
    int n1=n,m1=m;
    while(n1--)
    {
        cin>>str;
        mp[str]=1;/*建立str到1的映射,表示它出现过*/
    }
    while(m1--)
    {
        cin>>str;
        //mp[str]++;
        //cout<<mp[str]<<endl;
        if(mp[str])//如果str没有出现过,就会返回0
            com++;
    }
    if(com%2)
    {
        if(n>=m)
            printf("YES\n");
        else
            printf("NO\n");
    }
    else
    {
        if(n>m)
            printf("YES\n");
        else
            printf("NO\n");
    }
}

string

列几个会我经常用到函数:
length()/size() : 返回string的长度,即存放的字符数(两个函数基本相同)
substr() : substr(pos,len)返回从pos位置开始长度为len的子串
reverse() : 字符串反转函数

举个栗子:题目链接
代码:

#include <iostream>
#include<string>
using namespace std;
int main()
{
    string str1,str2;
    while(cin>>str1>>str2)
    {
        int flag=0;
        int l1=str1.size(),l2=str2.size();
        int len=min(l1,l2);
        for(int i=len;i>=1;i--)
        {
            string st1=str1.substr(l1-i,i);//返回后i位
            string st2=str2.substr(0,i);//返回前i位
            if(st1==st2)
            {
                cout<<st1<<endl;
                flag=1;
                break;
            }
        }
        if(!flag)
            cout<<'"'<<"NULL!"<<'"'<<endl;
    }
}

其他:
find(str2):
当str2是str的子串时,返回其在str中第一次出现的位置,否则返回string::npos(两个字符串长度分别为n、m) O(nm)
find(str2,pos):从str的pos位开始匹配,返回值同上

发布了52 篇原创文章 · 获赞 26 · 访问量 3165

猜你喜欢

转载自blog.csdn.net/qq_43803508/article/details/103281733
今日推荐