容器的基本用法

一、set

  • 唯一:set中每个元素值唯一,一个健值只能在set中出现0次或1次;
  • 有序:系统根据元素的值自动排序
1.头文件
#include <set>
2.声明
set<int> a;//定义了存放int类型元素的set
size();//返回容器尺寸
clear();//清空集合
3.添加元素
(1)添加单一元素
set<int> a_set;
a_set.insert(1);
(2)添加某一范围元素
set<int> a_set;
vector<int> b_vec;
a_set.insert(b_vec.begin();b_vec.end());
4.遍历元素
set<int> a_set;
for(set<int>::iterator p=a_set.begin();p!=a_set.end();p++)
{
    cout<<*p<<endl; //打印set中的元素
}
/*
若元素类型为RTDB_KEY_TYPE
cout<<(*p).FormStringID()<<endl;
*/
5.查找元素

返回给定值的定位器,如果没有找到则返回end();

if((set<int>::iterator p=a_set.find(2))!=a_set.end())
{
    cout<<*p<<endl;
}
6.判断容器中是否存在某个值

若容器中存在该值返回1,不存在返回0;

set<int> a_set;
if(a_set.count(1))
{
   cout<<"a_set中存在元素1"<<endl;
}

二、vector

1.创建对象
#include <vector>
vector<int> a_vec; 
2.初始化
(1)直接初始化
vector<int> a_vec(10); //初始化10个0元素
vector<int> b_vec(10,1); //初始化10个1元素
vector<int> c_vec(a_vec.size(),0); //初始化大小为a_vec,值为0
(2)拷贝函数
a_vec.assign(b_vec.begin(),b_vec.end());//把b_vec拷贝到a_vec
a_vec.assign(b_vec.begin(),b_vec.begin()+9);//把b_vec的前9个拷贝给a_vec
3.插入
(1)末尾插入
a_vec.push_back(1);
(2)任意位置插入
a_vec.insert(a_vec.begin()+2,10); //在位置2处插入加元素10

vector<int> a_vec={4,5,6,2};
a_vec.insert(a_vec.begin()+2,10);//输出:4,5,10,6,2
a_vec.insert(a_vec.begin(),3,15);//输出:15,15,15,4,5,10,6,2
4.遍历元素
(1)下标访问
for(int i=0;i<a_vec.size();i++)
{
    cout<<a_vec[i]<<end;
}
(2)迭代器访问
for(vector<int>::iterator vec_p=a_vec.begin();vec_p!=a_vec.end();vec_p++)
{
    cout<<*vec_p<<endl; //遍历打印a_vec中元素
}
5.元素求和
#include<numeric>

vector<int> a_vec;
int sum=accumulate(a_vec.begin(),a_vec.begin()+n,0);
/*
    前两个元素为代求和的始末位置,第三个元素为sum的初始值。
*/
 6.查找
find用法待补充

三、map

唯一:

有序:

map_1.begin()->first;  //返回map中第一个元素的key值
map_1.begin()->second;  //返回map中第一个元素的value
map_1.clear(); //清空
map_1.empty(); //判断容器是否为空,为空返回1,不为空返回0;
map_1.size(); //返回容器的元素个数
1.创建对象
#include<map>

map<int,long> a_map;
map<long,vector<float> > b_map;
map<long,map<long,vector<int> > > c_map;

map<long,vector<p_stru>>::iterator p=map.begin(); //带有结构体的map赋初值
2.查找
(1)根据关键字返回值 
map<int,int> a_map;
int result=a_map[key]; //返回a_map中key对应的健值,若找不到健,则创建关键字key
(2)查找find/count

在容器中找关键字,返回该元素的迭代器,找不到返回map.end();

map<long,float> a_map;
if(a_map.find(key1)!=a_map.end())
{
   cout<<"在a_map中找到关键字key1"<<endl;
}
map<long,float> a_map;
if(a_map.count("a"))
{
    a_map中包含字符"a";
}
3.插入/修改
map<long,float> c_map;
c_map[123]=3.23;
c_map[健]=值;
4.遍历

a.单层map遍历

map<long,long> a_map;
for(map<long,long>::iterator mp=a_map.begin();mp!=a_map.end();mp++)
{
   cout<<"a_map的健="<<mp->first<<";  对应的值="<<mp->second<<endl;
}
map<long,vector<long> > a_map;
for(map<long,vector<long>>::iterator mp=a_map.begin();mp!=a_map.end();mp++)
{
   cout<<"a_map的健="<<mp->first<<endl;
   for(int i=0;i<(mp->second).size();i++)
   {
      cout<<(mp->second)[i]<<endl;
   }
}

 b.双层map遍历

map<long,map<long,vector<int>>> a_map;
for(map<long,map<long,vector<int>>>::iterator mp=a_map.begin();mp!=a_map.end();mp++)
{
    cout<<"外部的健="<<mp->first<<endl;
    for(map<long,vector<int>>::iterator mp2=(mp->second).begin();mp2!=(mp->second).end();mp2++)
    {
        cout<<"内部的map健="<<mp2->first<<endl;
        for(int i=0;i<(mp2->second).size();i++)
        {
            cout<<(mp2->second)[i]<<endl;
        }
    }
}
5.判断是否存在

map中含有key返回1;不存在返回0;

if(a_map.count("a"))
{
   cout<<"a_map中含有a<<endl;
}

四、一些函数

1.includes

includes函数是判断一个升序数组是否被另一个升序数组包含。也是个求是否为子序列问题。
例如:arr1=[1,2,3,4],arr2=[2,3],则数组arr1包含数组arr2,arr2是arr1的子序列,若arr2=[2,5],则数组arr1不包含数组arr2,arr2不是arr1的子序列。
     注意:前提是这两个数组都是升序排列的!才能用includes函数。
first1和last1是包含数组的起始地址和尾地址,first2和last2是被包含数组的起始地址和尾地址。

情况1:arr1 = [3,5,7,9],arr2 = [5,9]

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> arr1{ 3, 5, 7, 9 };
    vector<int> arr2{ 5, 9 };

    if (includes(arr1.begin(), arr1.end(), arr2.begin(), arr2.end()))
        cout << "arr1 contains arr2\n";
    else
        cout << "arr1 doesn't contain arr2\n";
    
    return 0;
}

输出:

arr1 contains arr2

情况2:arr2 = [3,5,7,9],arr2 = [9,5]

#include <bits/stdc++.h>
using namespace std;

int main(){
    vector<int> arr1{ 3, 5, 7, 9 };
    vector<int> arr2{ 9, 5 };

    if (includes(arr1.begin(), arr1.end(), arr2.begin(), arr2.end()))
        cout << "arr1 contains arr2\n";
    else
        cout << "arr1 doesn't contain arr2\n";

    return 0;
}

输出

arr1 doesn't contain arr2

情况3:arr2 = [3,5,7,9],arr2 = [5,8]

#include <bits/stdc++.h>
using namespace std;

int main(){
    vector<int> arr1{ 3, 5, 7, 9 };
    vector<int> arr2{ 5, 8 };

    if (includes(arr1.begin(), arr1.end(), arr2.begin(), arr2.end()))
        cout << "arr1 contains arr2\n";
    else
        cout << "arr1 doesn't contain arr2\n";

    return 0;
}

输出:

arr1 doesn't contain arr2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值