蓝桥杯备赛学习要点梳理(4)——C++STL库-常见容器(下)

1  二元组  pair

储存二元组的容器,自行构建结构体也可以实现

作用用法示例
构造pair<第一个值数据类型,第二个值数据类型>  prpair<char,int>  pr;
赋值pair<数据类型,数据类型>  pr = make_pair(    ,    )pair<char,int>  pr = make_pair('a',1);
pair<数据类型,数据类型>  pr = {    ,    }pair<char,int>  pr = {'a',1};
取值.first/.secondp1 = pr.first , p2 = pr.second;
判同==

2  集合  set

提供对数时间的插入、删除、查找的集合数据结构。底层原理是红黑树

集合三要素解释setmultisetunordered_set
确定性一个元素要么在集合中,要么不在YYY
互异性一个元素仅可以在集合中出现一次YN(可出现任意次)Y
无序性集合中的元素是没有顺序的N(从小到大)N(从小到大)Y

作用用法示例
构造set<类型,比较器>  stset<int,greater<int>>  st;
插入元素.insert(元素)

st.insert(1);

删除元素.erase(元素)

st.erase(2);

查找元素.find(元素)(返回迭代器)auto it=st.find(1);
元素出现次数.count(元素)st.count(3);
查看大小/清空/判空

补充及注意事项

        1.遍历

    //使用迭代器遍历:

    for (set<int>::iterator it = st.begin(); it != st.end(); ++it)

        cout << *it << endl;

    //基于范围的循环(auto枚举):

    for (auto &ele : st)

        cout << ele << endl;

        2.不存在下标索引:set仅可使用迭代器进行遍历,不存在下标这一概念,无法通过下标访问

        3.元素只读:set的元素是只读的(是 const 迭代器),不可修改其值。如果要改,需要先 erase 再 insert

        4.不可用迭代器计算下标(非线性数据结构的迭代器)

3  映射  map

提供对数时间的有序键值对结构(可理解为函数?)底层原理是红黑树

性质解释mapmultimapunordered_map
互异性一个键仅可以在映射中出现一次YN(任意次)Y
无序性键是没有顺序的N(从大到小)N(从大到小)Y
作用用法示例
构造map<键类型,值类型,比较器>  mpmap<int,int,greater<int>>  st; //从大到小
增/改/查[  ]mp[1]=2;
查元素.find(元素)(返回迭代器)auto it = mp.find(1);
删除元素.erase(元素)mp.erase(2);
元素出现次数.count(元素)mp.count(3);
查看大小/清空/判空

补充及注意事项

        1.遍历               

    //使用迭代器遍历:

    for (map<int,int>::iterator it = mp.begin(); it != mp.end(); ++it)

        cout << it->first << ' ' << it->second << endl;

    //基于范围的循环(auto枚举):

    for (auto &pr : mp)

        cout << pr.first << ' ' << pr.second << endl;

        2. 如果使用中括号访问 map 时对应的键不存在,那么会新增这个键,并且值为默认值,因此中括号会影响键的存在性

    map<char, int> mp;
    cout << mp.count('a') << endl; // 0
    mp['a'];                       // 即使什么都没做,此时mp['a']=0已经插入了
    cout << mp.count('a') << endl; // 1
    cout << mp['a'] << endl;       // 0

        3.不可用迭代器计算下标(非线性数据结构的迭代器)

4  列表  list

list是一种双向链表容器,以节点的形式存储元素,并使用指针将节点链接在一起,形成链表结构

特点

        1.双向性:每个节点都包含前后两个指针,因此可以在常数时间内在链表任意位置进行插入、删除和访问

        2.动态大小

        3.不连续存储

作用用法示例
构造list<类型>  Lslist<int>  ls
插入头/尾.push_back(元素) / .push_front(元素)ls.push_back(2);
移除头/尾.pop_back() / .push_front()ls.pop_front();
引用头/尾.front() / .back()int m = ls.front;
指定位置插入.insert(迭代器,元素/元组)
移除指定位置.erase(迭代器头,迭代器尾)
查看大小/清空/判空
  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大只的辰阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值