STL常见容器之set/multiset、map/multimap
创始人
2024-05-30 15:02:49
0

set/multiset—集合容器

  • 特点
    • 所有元素都会在插入时自动被排序
  • 本质
    • set/multiset属于关联式容器,底层结构是二叉树实现
  • set和multiset区别
    • set不可以插入重复数据,而multiset可以
    • set插入数据的同时会返回插入结果,表示插入是否成功
    • multiset不会检测数据,因此可以插入重复数据
    • set不允许容器中有复杂的元素
    • multiset允许容器中有复杂的元素
  • 构造和赋值
    • 构造
      • set < T >st
      • set(const set &st)
    • 赋值
      • set& operator=(const set &st)
  • 大小和交换
    • size()
    • empty()
    • swap(st)
  • 插入和删除
    • 原型
      • insert(elem)
      • clear()
      • erase(pos)
      • erase(beg, end)
      • erase(elem)—删除容器中值为elem的元素
  • 查找和统计
    • 对set容器中进行查找数据及统计数据
    • 原型
      • find(key)—查找key是否存在,返回该键的元素的迭代器,若不存在则返回set.end()
      • count(key)—统计key的元素个数—只有0/1两种选择
  • pair对组创建
    • 功能
      • 成对出现的数据,利用对组可以返回两个数据
    • 创建方式
      • pair p (value1, value2)
      • pair p = make_pair(value1, value2)
        #include#includeusing namespace std;void test(void){// 第一种pair Person1("zhangsan", 18);cout << " name " << Person1.first << " age " << Person1.second << endl;// 第二种pair Person2 = make_pair("lisi", 28);cout << " name " << Person2.first << " age " << Person2.second << endl;}int main(){test();return 0;}
    
  • set容器排序
    • set容器默认排序规则为从小到大,如何改变规则
    • 利用仿函数
  • set容器存放内置数据类型如何改变规则
      #include#include#includeusing namespace std;// 仿函数class myCompare{public:bool operator()(int i1, int i2){return i1 > i2;}};void myPrint(const set& st){for (set::iterator it = st.begin(); it != st.end(); it++){cout << *it << endl;}}void test(void){set st;st.insert(10);st.insert(30);st.insert(90);st.insert(40);myPrint(st);cout << "=================================" << endl;set sts ;sts.insert(10);sts.insert(30);sts.insert(90);sts.insert(40);    for (set::iterator it = sts.begin(); it != sts.end(); it++){cout << *it << endl;}}int main(){test();return 0;}
    
  • set容器存放自定义数据类型如何改变规则—必须要自定义排序规则
      #include#include#includeusing namespace std;class Person{public:string m_name;int m_age;Person(string name, int age){this->m_name = name;this->m_age = age;}};// 仿函数class myCompare{public:bool operator()(const Person& i1, const Person& i2){return i1.m_age > i2.m_age;}};void test(void){set Infor;Person p1("zhangsan", 18);Person p2("lisi", 28);Person p3("wangwu", 20);Infor.insert(p1);Infor.insert(p2);Infor.insert(p3);for(set::iterator it = Infor.begin(); it != Infor.end(); it++){cout << "name " << it->m_name << " age " << it->m_age << endl;}}int main(){test();return 0;}
    

map/multimap容器

  • 基本概念
    • map中每个元素都是pair
    • pair中第一个元素为key,起到索引作用,第二个元素为value
    • 所有元素都会根据元素的键值自动排序
  • 本质
    • map/multimap属于关联式容器,底层结构是二叉树
  • 优点
    • 可以根据key快速找到value
  • map和multimap区别
    • map不允许容器中有重复key值元素
    • multimap允许容器中有重复key值元素
  • 构造和赋值
    • 原型
      • map< T1, T2 > mp
      • map(const map &mp)
    • 赋值
      • map& operator=(const map &mp)
      #include#includeusing namespace std;void test(void){map m;m.insert(pair(1, 10));m.insert(pair(2, 20));m.insert(pair(3, 30));for(map::iterator it = m.begin(); it != m.end(); it++){cout << "first " << it->first << " second "<< it->second << endl;}}int main(){test();return 0;}
    
  • 大小和交换
    • size()
    • empty()
    • swap(st)
  • 插入和删除
    • insert(elem)
        // 第一种m.insert(pair(1, 10));// 第二种---推荐m.insert(make_pair(2, 20));// 第三种m.insert(map::value_type(3, 30));// 第四种m[4] = 40;
      
    • clear()
    • erase(pos)
    • erase(beg, end)
    • erase(key)—删除容器中值为key的元素
  • 查找和统计
    • find(key)—找到返回迭代器,.first是key,.second是value,没找到返回m.end()
    • count(key)—返回整型有几个,只有0/1
  • map容器排序
    • map容器默认排序规则为按照key值进行从小到大排序,依然是利用仿函数可以改变排序规则
    • map< int, int, myCompare >

相关内容

热门资讯

xos系统是安卓吗,揭秘其与安... 你有没有听说过XOS系统?是不是好奇它是不是安卓系统呢?今天,就让我带你一探究竟,揭开这个神秘面纱!...
whatsup安卓系统下载,便... Hey,亲爱的手机控们,是不是又到了你心痒痒想要升级手机系统的时候了?今天,咱们就来聊聊那让人心动的...
安卓点餐系统自己做,重塑餐饮服... 你有没有想过,自己动手打造一个安卓点餐系统呢?想象点餐时不再需要繁琐的操作,一键就能完成,是不是很酷...
安卓安装系统验证失败,原因排查... 最近是不是你也遇到了安卓安装系统验证失败的问题?别急,让我来给你详细说说这个让人头疼的小麻烦,让你一...
三方开源安卓系统,基于三方开源... 你知道吗?在安卓的世界里,除了谷歌的官方系统,还有许多其他有趣的版本在悄悄崛起。今天,就让我带你一起...
安卓系统最老版本下载 你有没有想过,手机里的安卓系统其实也有它的“老古董”呢?没错,就是那些最古老的安卓版本,它们就像时间...
安卓系统能用外置卡吗 你有没有想过,你的安卓手机或者平板,是不是也能像电脑一样,通过外置卡来扩充存储空间呢?这可是个挺实用...
安卓系统游戏键盘鼠标,键盘鼠标... 你有没有发现,现在玩安卓系统游戏的时候,操作起来是不是感觉有点不方便?别急,今天就来给你好好聊聊安卓...
安卓系统信息弹出窗口,信息弹出... 你有没有发现,每次打开手机,安卓系统总喜欢跳出来一些信息弹出窗口?有时候是更新提醒,有时候是权限请求...
安卓系统安装h5,Androi... 你有没有想过,你的安卓手机里竟然可以装上那些炫酷的H5页面呢?没错,就是那种一打开就能动起来的网页!...
安卓手机系统自动更新 你有没有发现,你的安卓手机最近总是时不时地提醒你更新系统呢?这可不是什么小事情哦,今天就来给你好好说...
手机系统pe下载安卓,PE系统... 你有没有想过,手机系统更新换代的速度简直就像小孩子的成长一样快?这不,最近有个新词儿在手机圈里火了起...
安卓系统怎么翻回国,轻松翻回国... 亲爱的手机控们,你是不是在用安卓系统的时候,突然发现一些应用或者设置都是英文的,心里痒痒的想要把它们...
安卓系统如何消除红点,轻松解决... 手机屏幕上那个讨厌的红点,是不是让你每次拿起手机都忍不住想戳它两下?别急,今天就来教你怎么把这个小麻...
安卓系统分屏怎么用 你有没有发现,现在手机的功能越来越强大了?比如,安卓系统的分屏功能,简直就是一个神器!想象一边看视频...
爱奇艺安卓系统涨价,用户权益与... 最近有个消息在朋友圈里传得沸沸扬扬的,那就是爱奇艺在安卓系统上的订阅费用要涨价啦!这可真是让人有点措...
安卓系统iso系统是什么意思,... 你有没有听说过安卓系统和ISO系统?这两个听起来有点像高科技术语的东西,其实它们在我们的生活中扮演着...
王牌电视是安卓系统,智能娱乐新... 亲爱的读者们,你是否在寻找一款既能满足你对电视观影需求,又能让你畅游安卓世界的智能电视呢?今天,就让...
小型游戏机安卓系统 你有没有想过,在忙碌的生活中,来点小确幸?比如,坐在沙发上,手握一个小巧的游戏机,享受一下游戏的乐趣...
魅族系统如何装安卓,一键安装教... 你有没有想过,你的魅族手机其实也可以拥有安卓系统的风采呢?没错,就是那个自由度极高的安卓系统!今天,...