C++:set和map的使用指南

目录

以下文章参考文档

一、底层结构

二、set

     1、set的介绍

     2、set的使用

     (1)set的插入(insert)

     (2)find和erase使用

        (a)删除最小值

          (b)直接删除x

        (3)直接查找在利用迭代器删除x

(3)lower_bound和upper_bound的使用

三、map

     1、map的介绍

     2、map的使用

        (1)构造遍历及增删查使用

     (2)map的迭代器和[]的使用


以下文章参考文档

<set> - C++ Reference (cplusplus.com)

map - C++ Reference (cplusplus.com)


一、底层结构

        C++中的setmap的底层结构是红黑树,红黑树是⼀颗平衡⼆叉搜索树。
(若不知道什么是红黑树的可以看看这篇文章->C++:红黑树的实现-CSDN博客


二、set

     1、set的介绍

  1. set底层是用红黑树实现,增删查效率是(O(logN)) ,迭代器遍历是走的搜索树的中序,所以是有序的。
  2. set的声明如下,T就是set底层关键字的类型
  3. set默认要求T支持小于比较,如果不支持或者想按自己的需求走可以自行实现仿函数传给第⼆个模版参数(⼀般情况下,我们都不需要传后两个模版参数)
  4. set中只能存在一个相同的值,若插入相同的值给set,将会插入失败。
std::set
template < class T,                        // set::key_type/value_type
           class Compare = less<T>,        // set::key_compare/value_compare
           class Alloc = allocator<T>      // set::allocator_type
           > class set;

        set的支持正向和反向迭代遍历,遍历默认按升序顺序,因为底层是⼆叉搜索树,迭代器遍历走的中序;支持迭代器就意味着支持范围for,set的iterator和const_iterator都不支持迭代器修改数据,修改关键字数据,破坏了底层搜索树的结构。


     2、set的使用

     (1)set的插入(insert)

#include<iostream>
#include<set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(5);
    s.insert(2);
    s.insert(7);
    s.insert(5);

    auto it = s.begin();
    while (it != s.end())
    {

        cout << *it << " ";
        ++it;
    } 
    cout << endl;
}

打印结果↓

        如set介绍里第四条所述,set中只能存在一个相同的值,插入重复的5将会插入失败。而且set的底层是红黑树,(平衡二叉搜索树) 用迭代器遍历是用中序遍历,所以打印结果会是升序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值