zoukankan      html  css  js  c++  java
  • STL之set、multiset、functor&pair使用方法

    set是一个集合容器,其中包含的元素是唯一的,集合中的元素是按照一定的顺序排列的。元素插入过程是按照排序规则插入,所以不能使用指定位置插入。

    set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。

    set不可以直接存取元素,(不可以使用at.(pos)与[]操作符

    multiset与set的区别:set支持唯一键值,每个元素都只能出现一次,而multiset中同一值可以出现多次。

    不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的,如果希望修改成同一元素值必须先删除原有的元素,再插入新的元素。

    关于set怎样使一个我们自己定义的类型达到我们规定的排序目的呢?

    假如定义一个CStudent类怎么样让这个类的元素按照学号来排序呢?

    首先我们先来定义这样一个类然后利用set排序就是对operator()进行的重载来比较大小,就自己将这个方法写入到一个结构体中调用它,具体过程如下

     1 class CStudent
     2 {
     3 public:
     4     int m_n_ID;
     5     string m_strName; 
     6     CStudent(int iID, string strName)
     7     {
     8         m_n_ID = iID;
     9         m_strName = strName;
    10     }
    11 };
    12 
    13 struct studentFounction 
    14 {
    15     bool operator()(const CStudent &stu1,const CStudent &stu2)
    16     {
    17         return (stu1.m_n_ID<stu2.m_n_ID);
    18     }
    19 
    20 };
    21 
    22 set<CStudent,studentFounction> setStu;
    23 setStu.insert(CStudent(1,"小王"));
    24 setStu.insert(CStudent(3,"小刘"));
    25 setStu.insert(CStudent(6,"小李"));
    26 setStu.insert(CStudent(2,"小张"));
    27 setStu.insert(CStudent(4,"小彭"));
    28 setStu.insert(CStudent(5,"小杰"));
    29 for (set<CStudent,studentFounction>::iterator it = setStu.begin();it != setStu.end();it++)
    30 {
    31     cout<<it->m_strName<<endl;
    32 }

     值得一说的是在删除中set.erase(elem)//根据元素值删除对应元素

    set<int>::iterator it = setInt.find(elem)//返回查找值对应迭代器

    set<int>::iterator it = setInt.lower_bound(elem);//返回的是第一个比指定值小的元素迭代器

    set.equal_range(elem);//返回容器中与elem相等的上下限的两个迭代器。

    而需要注意的是下限是开区间上限是闭区间[beg,end).以上函数返回两个迭代器,而这两个迭代器被封装在pair中。

    pair被译为对组,可以将两个视为一个单元。pari<T1,T2>存放的两个值的类型,可以不一样,如T1为int,T2为float。T1,T2也可以是自定义类型

    pair.first是pair里面的第一个值,是T1的类型

    pair.second是pair里面的第二个值,是T2的类型

    multiset可以有相同的元素这是与set的不同之处

  • 相关阅读:
    父组件向子组件传递数据(vue.js)
    vue引入JQ的方法
    webstorm添加*.vue文件代码提醒支持webstorm支持es6vue里支持es6写法
    创建脚手架步骤
    JS严格校验身份证号
    微信小程序开发工具 常用快捷键
    GIT 常用命令
    git 操作
    通过selenium(也有Puppeter版在最后)登录网页获取特定信息
    用Django ORM实现树状结构
  • 原文地址:https://www.cnblogs.com/XCoderLiu/p/STL.html
Copyright © 2011-2022 走看看