ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

map_set使用说明

2022-09-03 17:01:20  阅读:206  来源: 互联网

标签:map set cout 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,cout,insert,auto,s1,countmap,说明
来源: https://www.cnblogs.com/LonelyMoNan/p/16653012.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有