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

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<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