map_set使用说明

map_set使用说明

map的底层结构大致是一个哈希表,set的底层结构大致是一个红黑树 不代表全部!

set

#include"map_set.h"

//set的底层结构大致是一个红黑树 不代表全部!

void test1()
{
    //set的结构天生有排序+去重
    set<int> s;
    s.insert(2);
    s.insert(2);
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(4);
    s.insert(6);
    s.insert(5);
    for (auto& e : s)
    {
        cout << e << " ";
    }
    cout << endl;

    //而multiset是排序 不去重
    multiset<int> s1;
    s1.insert(2);
    s1.insert(2);
    s1.insert(1);
    s1.insert(4);
    s1.insert(3);
    s1.insert(4);
    s1.insert(6);
    s1.insert(5);
    for (auto& e : s1)
    {
        cout << e << " ";
    }
    cout << endl;
    set<int>::iterator it = s.find(2);//set数据结构里的查找 O(logN)
    find(s.begin(), s.end(), 2);//算法结构里的查找 O(N)

    //*it = 2;  set的const版本与非const版本都是不允许修改值的
    if (it != s.end())
    {
        cout << "查找到了" << endl;
    }
    else
    {
        cout << "未查找到"<<endl;
    }
    cout << endl;

    if (s.count(100))//count也用于查找 并且方便
    {
        cout << "查找到了"<<endl;
    }
    else
    {
        cout << "未查找到"<<endl;
    }

    s.erase(3);
    s.erase(1000);
    //删值 当删的值不存在,不会有崩溃
    set<int>::iterator it1 = s.find(3);
    set<int>::iterator it2 = s.find(1000);
    //s.erase(it1);
    //s.erase(it2);
    //删迭代器 当迭代器不存在,会崩溃 所以删迭代器时 需要加上判断
    if (it1 != s.end())
    {
        s.erase(it1);
    }
    if (it2 != s.end())
    {
        s.erase(it2);
    }

    //这串代码 是可以持续删除指定值
    //int x;
    //while (cin >> x)
    //{
    //    for (auto& e : s)
    //    {
    //        cout << e << " ";
    //    }
    //    cout << endl;
    //    auto it3 = s.find(x);
    //    if (it3 != s.end())
    //    {
    //        s.erase(it3);
    //        cout << "删除成功" << endl;
    //        for (auto& e : s)
    //        {
    //            cout << e << " ";
    //        }
    //        cout << endl;
    //    }
    //    else
    //    {
    //        cout << "未查找到该值" << endl;
    //        for (auto& e : s)
    //        {
    //            cout << e << " ";
    //        }
    //        cout << endl;
    //    }
    //}

    //这串代码可以删除范围里的值
    int x1, y2;
    for (auto& e : s)
    {
        cout << e << " ";
    }
    cout << endl;
    cout << "请输入范围: ";
    cin >> x1 >> y2;
    set<int>::iterator left = s.lower_bound(x1);//返回>=x的值
    set<int>::iterator right = s.upper_bound(y2);//>x的值
    //若数据为: 1 2 3 4 6 7
    //输入 -1 5
    //那么left=1 right=6
    //但删除了数据为 :1 2 3 4
    //删除后 6 7   right返回的值 是不删除的 删除的是left以及left后面的值和right前面的值
    //如果输入 1 4
    //那么删除的就是 1 2 3 4
    //删除后  6 7
    //如果right找到这个值 那么就删除,找不到就返回比他大的值,删除它前面的值
    s.erase(left, right);
    for (auto& e : s)
    {
        cout << e << " ";
    }
    cout << endl;
    if (s1.count(4))//返回数据中有几个4
    {
        cout << s1.count(4) << endl;
        s1.erase(4);//将4全部删除
        for (auto& e : s1)
        {
            cout << e << " ";
        }
    }

    s.find(4);//multise里的数据有多个4时 返回中序的第一个4

}

int main()
{
    test1();
    return 0;
}

map

void test1()
{
    string str;
    int x = 0;
    map<string, int> countmap;
    while (cin >> str)
    {
        //方法一:
        //pair::iterator, bool> ret = countmap.insert(make_pair (str, 1));
        //pair的为    第一个为 first  第二个为 second
        ,bool>//first(iteraotr) 里面存着  countmap
        ,int>//second (bool) 里面存着 bool
        //第一个存数据 第二个判断数据中是否有重复的 没有重复则为false 有重复则为true

        //可以用auto 快速定义类型
        //auto ret = countmap.insert(make_pair(str, 1));
        //if (ret.second == false)
        //{
        //    ret.first->second++;
        //}

        //方法二:
        //可以优化为一条代码
        //[]的重载  很方便  
            countmap[str]++;//查找+插入+修改

    }
    //这里可直接修改
    countmap["桃子"] = 100;//查找+插入+修改
    countmap["葡萄"];//查找+插入
    countmap["苹果"] = 50;//查找+修改
    for (auto& e : countmap)
    {
        cout << e.first << " " << e.second <<""<< endl;
    }
}

int main()
{
    test1();
    return 0;
}

这就是本篇的全部内容,感谢您能观看到这里,如若有问题请评论或私信,感谢您的观看

Original: https://www.cnblogs.com/LonelyMoNan/p/16653012.html
Author: lemon-Breeze
Title: map_set使用说明

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606846/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux目录结构

    一、基本介绍 linux文件系统采用级层的树状目录结构,最上层的就是根目录 / ,在此基础上创建其他目录。在linux中一切皆为文件 二、详细目录介绍 /bin(不可随意更改):该…

    Linux 2023年6月6日
    0136
  • 定时备份Docker中的MySQL数据库

    新建脚本 mysql_bak.sh mysql 为docker中的mysql容器名 #!/bin/bash docker_name=mysql data_dir="/op…

    Linux 2023年6月14日
    0103
  • Centos下使用containerd管理容器:5分钟从docker转型到containerd

    一.系统环境 二.前言 三.containerd 四.部署containerd 4.1 安装containerd 4.2 containerd配置文件 4.3 配置containe…

    Linux 2023年6月7日
    0160
  • JDK的环境变量

    jdk下载并配置下载jdk下图是自己资源管理器中jdk的安装路径,双击然后next就好,不需要改什么配置 手里没有安装包的,下载地址在这里 :https://www.oracle….

    Linux 2023年6月13日
    069
  • 字节 字符 位(比特)

    位(bit):binary digit,计算机储存的最小单位,n个比特可以确定2^n个情况,如11010100为8位。 字节(byte):一个字节储存8位无符号数,范围为0-225…

    Linux 2023年6月13日
    0100
  • js笔记之while循环

    while循环就是for循环去掉前后两个条件 var i = 0; for( ; i < 10; ){ document.write(i); document.write(&…

    Linux 2023年6月13日
    098
  • kafka能做什么?kafka集群配置 (卡夫卡 大数据)

    什么是Kafka 官网介绍: 几个概念: 详细介绍 : 操作kafka: kafka集群 消息测试 问题检测 什么是Kafka 官网介绍: ApacheKafka®是一个分布式流媒…

    Linux 2023年6月7日
    0125
  • 19-TCP、UDP的区别和应用场景

    可靠性TCP 提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据包在…

    Linux 2023年6月7日
    080
  • 音视频技术入门课 -01 如何从色彩格式、帧率等参数角度看视频图像?

    本文将从视频 / 图像的原始数据格式、视频逐行 / 隔行扫描、帧率、图像分辨率、色域等几方面入手,对视频基础知识做一个整体性的了解。 看视频时会看到很多图像,是由一个个像素点组成的…

    Linux 2023年6月7日
    0126
  • linux自动备份mysql数据库

    备份脚本记录一下–(单个数据库) 2021-11-15 1.新建shell脚本:vim **.sh #!/bin/bashCKUP=/data/backup/db #获…

    Linux 2023年5月27日
    0112
  • MySQL优化

    1.建立索引 (1)合理的索引能够加速数据读取效率,不合理的索引反而会拖慢响应速度; (2)索引越多,更新数据的速度越慢 (3)尽量在MyIsam作为引擎的时候使用索引 (4)可在…

    Linux 2023年6月7日
    056
  • 磁盘空间满,如何处理?

    作为运维人员,磁盘空间报警是最寻常遇到的情况,那么遇到空间如何处理呢?这里介绍一下处理办法及处理思路。 操作系统:centos系统 、Ubuntu 1 定位目录 收到空间报警信息,…

    Linux 2023年6月6日
    0103
  • 我可以不在校园

    我在校园自动打卡,仅作学习使用。 我在校园自动打卡,仅作学习使用 直达电梯:我可以不在校园 posted @2021-11-19 17:38 DominicKK 阅读(258 ) …

    Linux 2023年6月8日
    0107
  • 附025.kubeadm部署Kubernetes更新证书

    一 查看证书 提示:由上可知,根证书有效期为10年,其他所有证书有效期为1年。 二 证书类别 由此集群根证书签发的证书有: 提示:kubelet的/var/lib/kubelet/…

    Linux 2023年6月13日
    0121
  • muduo项目介绍

    在上一个集群聊天服务器项目中,我使用了 muduo作为网络库,然后主要实现了业务逻辑等,所以为了深入网络库的代码和实现,我跟着一位老师的代码去实现了 muduo库的基本原理和作用,…

    Linux 2023年6月13日
    0105
  • Web开发静态资源处理

    Web开发静态资源处理 7.1 静态资源处理 我们要引入前端资源,项目中有许多的静态资源,比如css,js等文件,这个SpringBoot是怎么处理呢? 如果我们是一个web应用,…

    Linux 2023年6月14日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球