zoukankan      html  css  js  c++  java
  • c++ STL 容器——联合容器

    STL提供了四种联合容器 set,multiset,map,multimap;

    set and multiset在<set>头文件

    map and multimap在<map>头文件

    模板函数都一样的http://www.cnblogs.com/jinmingyi/p/6798359.html

    set/map中迭代器不能++或--,因为不是连续的序列,是树。

    set:

    在set中,值就是关键字,集合中不会有多个相同的关键字,且始终按从小到大的顺序排列

    可反转可排序,关键字是唯一的,只能存储同一个类型的值

     1 #include<iostream>
     2 #include<set>
     3 using namespace std;
     4 void update(set<int>&s,set<int>::iterator it,int i)
     5 {
     6     int x = *it;        //使x保存当前迭代器指向的数值
     7     x += i;                //x更改为需要的数值
     8     s.erase(*it);        //删除set中迭代器指向的数值*it
     9     s.insert(x);        //将新的x插入set
    10 }
    11 int main()
    12 {
    13     set<int>s;            //声明一个set
    14     for (int i = 0; i < 10; i++)
    15     {
    16         s.insert(i);    //向set中插入数值
    17     }
    18     set<int>::iterator it;
    19     int i;
    20     if (s.find(2) == s.end())
    21         cout << "no 2" << endl;
    22     else
    23         cout << "yes" << endl;
    24     for (i=0,it = s.begin(); it != s.end(); i++)
    25     {
    26         update(s,it, i);    //不能对set中已有的数值操作  自己写个更新函数
    27         it = s.find(i);
    28     }
    29 }

    map:

    map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的

    声明一个map: map<下标的类型,对应数据的类型>name;

     1 #include<map>
     2 #include<iostream>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, int>mp;    //声明一个map
     8     mp["abc"] = 1;        //向map中添加一个数据
     9     map<string, int>::iterator it;//声明一个迭代器
    10     it = mp.find("aaa");//find函数返回一个迭代器,找到返回对应迭代器,否则返回end()
    11     if (it == mp.end())
    12         cout << "no" << endl;
    13 }

    还有这两个都可以用lowet_bound()  (大于等于的第一个)和upper_bound()  (绝对大于的第一个,双写p!)  返回的都是迭代器。

    写博中发现一个细节:迭代器it对应的元素被删掉了,就不能在it++或it--;

    如果

  • 相关阅读:
    总复习
    第十七天(最后的模块)
    第十五天(内置函数)
    第16天(内置模块)
    第十四天(模块)
    第十三天(都是理论)
    第十二天(叠加装饰器和迭代器)
    python基础学习-day33==课后作业练习
    python基础学习-面向对象高级
    python基础学习-day29==课后作业练习
  • 原文地址:https://www.cnblogs.com/jinmingyi/p/6803718.html
Copyright © 2011-2022 走看看