The second part of the STL

 

目录

string 

string 的构造

string 比较大小

string 长度判断以及遍历

string 三个常用的函数

priority_queue

优先队列基本使用

结构体优先队列

Pair 

pair的基本用法

Set

set的基本用法

set的常用的函数

multiset

multiset基本用法

Map

map构造方式

map的一些函数

multimap

multimap的简单使用

Bitset

bitset构造

bitset运算

Unordered__map

简单例子


string 

string 的构造

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");//构造方法
    //构造方法还有很多,这里只介绍这几个
    cout<<str1+str2<<endl;
    cout<<str2+str1<<endl;
    return 0;
}

string 比较大小

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    vector<string>str;
    string str1="hello";
    string str2("world");
    //字符串也可以进行大小比较
    //按照字符序
    //看例子

    str.push_back(str1);
    str.push_back(str2);
    string str3="aaaa";
    cout<<(str1>str3)<<endl;
    str.push_back(str3);
    sort(str.begin(),str.end());//排序
    cout<<"排序好的:"<<endl;
    for(int i=0;i<str.size();i++)
        cout<<i<<"  "<<str[i]<<endl;
    return 0;
}

string 长度判断以及遍历

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");
    string st="";
    cout<<"st为空的吗?"<<st.empty()<<endl;//判断是否为空
    cout<<"hello长度:"<<str1.length()<<endl;//返回string的长度
    for(int i=0;i<str2.size();i++)
        printf("%c\n",str2[i]);
    return 0;
}

string 三个常用的函数

#include<bits/stdc++.h>
//#include<string>
using namespace std;
int main()
{
    string str1="hello";
    string str2("world");
    string s=str1+str2;
    cout<<s<<endl;
    cout<<s.find("low")<<endl;//返回找到的下标
    //找不到返回string::npos
    s.erase(0,3);//删除0开始长度为3的字符串
    cout<<s<<endl;
    cout<<s.substr(0,3)<<endl;//取0开始长度为3的子字符串
    return 0;
}//还有好多不常用的函数,有兴趣自己看

priority_queue

优先队列基本使用

#include<bits/stdc++.h>
//#include<queue>
using namespace std;
struct node{
int x,y;
node(){}
node(int x,int y):x(x),y(y){}
friend operator <(const node &a,const node &b)
{
    return a.x<b.x;
}
};
int main()
{
    priority_queue<int,vector<int>,less <int> > q1;//greater<int>
    priority_queue<int>q2;
    priority_queue<node>q3;//很常用
    q2.push(5);
    q2.push(4);
    q2.push(3);
    q2.push(6);
    q2.push(2);//压到优先队列
    cout<<q2.size()<<endl;//大小
    while(!q2.empty())//判断是否为空
    {
        printf("%d\n",q2.top());//优先队列队首
        q2.pop();//弹出
    }
    return 0;
}

结构体优先队列

#include<bits/stdc++.h>
//#include<queue>
using namespace std;
struct node{
int x,y;
node(){}
node(int x,int y):x(x),y(y){}
friend operator <(const node &a,const node &b)
{
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}
};
int main()
{
    priority_queue<int,vector<int>,less <int> > q1;//greater<int>
    priority_queue<int>q2;
    priority_queue<node>q3;//很常用
    q3.push(node(1,2));
    q3.push(node(1,3));
    q3.push(node(1,1));
    q3.push(node(2,3));
    q3.push(node(0,2));
    cout<<q3.size()<<endl;//大小
    while(!q3.empty())//判断是否为空
    {
        printf("%d  %d\n",q3.top().x,q3.top().y);//优先队列队首
        q3.pop();//弹出
    }
    return 0;
}

Pair 

pair的基本用法

#include<bits/stdc++.h>
//#include <utility>  pair位置
using namespace std;
pair<int,int>p;
int main()
{
    p=make_pair(1,2);
    cout<<(p.first)<<" "<<(p.second)<<endl;
    p=pair<int,int>(3,4);
    cout<<(p.first)<<" "<<(p.second)<<endl;
    //pair类似于有两个变量的结构体
}

Set

set的基本用法

#include<bits/stdc++.h>
//#include <set> 
using namespace std;
set<int>s;
set<int>::iterator it;//迭代器  可理解为类似于指针的东西
int main()
{
    s.insert(12);//将数添加到集合
    s.insert(13);
    s.insert(15);
    s.insert(10);
    s.insert(15);//set自动排序  自动去重
    for(it=s.begin();it!=s.end();it++)//遍历一遍
    {
        printf("%d\n",*it);
    }
}

set的常用的函数

#include<bits/stdc++.h>
using namespace std;
set<int>s;
set<int>::iterator it;//迭代器  可理解为类似于指针的东西
int main()
{
    s.insert(12);
    s.insert(13);
    s.insert(15);
    s.insert(10);
    s.insert(15);//set自动排序  自动去重
    cout<<s.count(15)<<endl;
    //15的数量  为1
    //可以判断某个元素是不是在这个集合里面
    //复杂度  log n
    cout<<s.size()<<endl;//集合里面有多少
    s.erase(15);//删掉这个数
    cout<<s.size()<<endl;
    s.clear();
    s.empty()?printf("1"):printf("0");
}

multiset

multiset基本用法

#include<bits/stdc++.h>
using namespace std;
multiset<pair<int,int> >s;//不去重
multiset<pair<int,int> >::iterator it;//迭代器  可理解为类似于指针的东西
int main()
{
    s.insert(make_pair(6,2));
    s.insert(make_pair(1,2));
    s.insert(make_pair(1,2));//不去重
    s.insert(make_pair(2,2));
    s.insert(make_pair(0,3));
    s.insert(make_pair(0,5));
    cout<<s.count(make_pair(1,2))<<endl;//log n
    for(it=s.begin();it!=s.end();it++)//遍历一遍
    {
        printf("%d %d\n",(*it).first,(*it).second);
    }
}

Map

map构造方式

#include<bits/stdc++.h>
//#include<map>
using namespace std;
map<string,int>mp;//类似于字典
map<string,int>::iterator it;//每个string 对应一个int
int main()
{
    mp["a"]=12;
    mp["po"]=13;
    mp["cc"]=13;
    mp["cc"]=16;
    mp["dc"]=16;//排序并且去重
    mp.insert(make_pair("hhh",89));
    for(it=mp.begin();it!=mp.end();it++)//遍历
    {
        cout<<(it->first)<<" "<<(it->second)<<endl;
    }
}

map的一些函数

#include<bits/stdc++.h>
//#include<map>
using namespace std;
map<string,int>mp;//类似于字典
map<string,int>::iterator it;//每个string 对应一个int
int main()
{
    mp["a"]=12;
    mp["po"]=13;
    mp["cc"]=13;
    mp["cc"]=16;
    mp["dc"]=16;//排序并且去重
    mp.insert(make_pair("hhh",89));
    cout<<mp.size()<<endl;
    mp.erase("cc");//删
    cout<<mp.size()<<endl;
    cout<<mp.count("po")<<endl;
    cout<<((mp.find("a"))->second);//mp.find("a")返回a的迭代器
    mp.clear();
}

multimap

multimap的简单使用

#include<bits/stdc++.h>
//#include<map>乱搞了一个就是字典中的一个可以对应多个,

using namespace std;
struct tem1{
int x,y,z;
tem1(){}
tem1(int x,int y,int z):x(x),y(y),z(z){}
friend operator <(const tem1 &a,const tem1 &b)
{
    return a.x<b.x;
}

};
struct tem2{
int u,v;
tem2(){}
tem2(int x,int y){u=x,v=y;}

};
multimap<tem1,tem2>mp;
multimap<tem1,tem2>::iterator it;
int main()
{
    mp.insert(make_pair(tem1(1,1,1),tem2(1,1)));//只能insert
    mp.insert(make_pair(tem1(1,1,1),tem2(3,6)));
    mp.insert(make_pair(tem1(9,8,5),tem2(1,1)));
    mp.insert(make_pair(tem1(6,1,1),tem2(1,1)));
    for(it=mp.begin();it!=mp.end();it++)
    {
       printf("%d",(*it).first.x);
        printf("\n");
    }
}

Bitset

bitset构造

#include<bits/stdc++.h>
#include<bitset>
using namespace std;
int main()
{
    string s="1001";
    bitset<32>f(s);
    bitset<32>g(65535);
    cout<<f<<endl<<g<<endl;
}

bitset运算

bitset的运算就像一个普通的整数一样,可以进行与(&)、或(|)、异或(^)、左移(<<)、右移(>>)等操作。

 

#include<bits/stdc++.h>
#include<bitset>
using namespace std;
int main()
{
    string s="1001";
    bitset<32>f(s);
    bitset<32>g(65535);
    cout<<f<<endl<<g<<endl;
    cout<<(f&g)<<"  f&g"<<endl;
    cout<<(f<<1)<<"  f<<1"<<endl;
    cout<<g.count();
}

Unordered__map

简单例子

#include<bits/stdc++.h>
//#include<map>
using namespace std;
unordered_map<string,int>mp;//类似于字典
unordered_map<string,int>::iterator it;//每个string 对应一个int
int main()
{
    mp["a"]=12;
    mp["po"]=13;
    mp["cc"]=65;
    mp["cc"]=16;
    mp["dc"]=16;//排序并且去重
    mp.insert(make_pair("hhh",89));

    cout<<mp["cc"]<<endl;//如果是map需要o(log(n))  unordered__map只要o(1)
}

 

全部评论

相关推荐

09-12 15:03
已编辑
台州学院 材料工程师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务