首页 > 其他分享 >map_set使用说明

map_set使用说明

时间:2022-09-03 16:55:06浏览次数:41  
标签:map set insert auto s1 countmap 说明

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<map<string, int>::iterator, bool> ret = countmap.insert(make_pair (str, 1));
        //pair的为  <iterator,bool>  第一个为 first  第二个为 second
        //first(iteraotr) 里面存着  countmap<string,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;
}

 

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

标签:map,set,insert,auto,s1,countmap,说明
From: https://www.cnblogs.com/LonelyMoNan/p/16653012.html

相关文章

  • Solution Set -「AGC 001~003」C~F
    目录「AGC001C」ShortenDiameter「AGC001D」ArraysandPalindrome*「AGC001E」BBQHard*「AGC001F」WildSwap^「AGC002C」KnotPuzzle「AGC002D」StampRally......
  • 工具学习:IDEA的Setting通用设置总结
    工具学习:IDEA的Setting通用设置总结IDEA的官网地址:https://www.jetbrains.com/idea/1.关闭IntellijIDEA自动更新目录:setting--》Appearance&Behavior–》SystemSetti......
  • vue3——初识setup
    1.理解:Vue3中一个新的配置项,值为一个函数。2.setup是所有CompositionAPI(组合API)表演的舞台3.组件中所用到的:数据、方法等等,均要配置在setup中。 4.setup函数的两种......
  • mybatis-plus-generator 配置不生成 entity, controller, mapper 等
    3.5.2版本有需求不生成controller于是baidu发现如下方法.templateConfig(builder->builder.controller(""))配置后确实不生成controller 又有需求不生成entit......
  • 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
    参考与前言本文主要介绍建图Mapping方面的一些基础知识介绍与相关下游任务使用涉及知识较为基础,SLAM大佬们可以提前退出了主要针对应用为移动机器人与物流无人驾驶......
  • [Node.js] Setup a Node.js CLI
    CreatingaCLIinNode.jsjusttakesaextrasteportwobecausetheyarereallyjustanordinaryNode.jsappwrappedbehindabincommand.Forthisexercise,......
  • tkMapper
    一、DAO层的实现的规律实体类与数据表存在对应关系,并且是有规律的——只要知道了数据表的结构,就能够生成实体类;所有实体的DAO接口中定义的方法也是有规律的,不同点就......
  • BI_SQL盲注框架使用说明
    简介​ 这里是SQL盲注框架的使用说明文档,这个项目的初衷是为了解决在CTF中编写SQL盲注脚本的不便:大部分时间编写的SQL盲注脚本都是payload指向的,这就导致了基本上一个题要......
  • UE4 C++学习 UFunction函数说明符
    本文就什么是UFunction?UFunction怎么用?做一个简单的总结UFUNCTION和UPROPERTY一样都为UE4的反射系统服务,要知道什么是反射系统可以看上一个博客:UE4C++学习浅析UProperty......
  • 举例说明 alias 和 unalias 命令
    如果不是一个命令行重度用户的话,过了一段时间之后,你就可能已经忘记了这些复杂且冗长的Linux命令了。当然,有很多方法可以让你回想起遗忘的命令。你可以简单的保存常用的......