加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C++ STL multiset容器说明

发布时间:2022-07-15 18:08:14 所属栏目:语言 来源:互联网
导读:前面章节中,对 set 容器做了详细的讲解。回忆一下,set 容器具有以下几个特性: 不再以键值对的方式存储数据,因为 set 容器专门用于存储键和值相等的键值对,因此该容器中真正存储的是各个键值对的值(value); set 容器在存储数据时,会根据各元素值的
  前面章节中,对 set 容器做了详细的讲解。回忆一下,set 容器具有以下几个特性:
  不再以键值对的方式存储数据,因为 set 容器专门用于存储键和值相等的键值对,因此该容器中真正存储的是各个键值对的值(value);
  set 容器在存储数据时,会根据各元素值的大小对存储的元素进行排序(默认做升序排序);
  存储到 set 容器中的元素,虽然其类型没有明确用 const 修饰,但正常情况下它们的值是无法被修改的;
  set 容器存储的元素必须互不相等。
 
  multiset 类模板中提供了 5 种构造函数,也就代表有 5 种创建 multiset 容器的方式,分别如下。
 
  1) 调用默认构造函数,创建空的 multiset 容器。比如:
  std::multiset<std::string> mymultiset;
  如果程序中已经默认指定了 std 命令空间,这里可以省略 std::。
 
  由此就创建好了一个 mymultiset 容器,该容器采用默认的std::less<T>规则,会对存储的 string 类型元素做升序排序。
  注意,由于 multiset 容器支持随时向内部添加新的元素,因此创建空 multiset 容器的方法比较常用。
 
 
  2)除此之外,multiset 类模板还支持在创建 multiset 容器的同时,对其进行初始化。例如:
  std::multiset<std::string> mymultiset{ "http://c.biancheng.net/java/",
                                         "http://c.biancheng.net/stl/",
                                         "http://c.biancheng.net/python/" };
  由此即创建好了包含 3 个 string 元素的 mymultiset 容器。由于其采用默认的std::less<T>规则,因此其内部存储 string 元素的顺序如下所示:
  "http://c.biancheng.net/java/"
  "http://c.biancheng.net/python/"
  "http://c.biancheng.net/stl/"
 
 
  3) multiset 类模板中还提供了拷贝(复制)构造函数,可以实现在创建新 multiset 容器的同时,将已有 multiset 容器中存储的所有元素全部复制到新 multiset 容器中。
 
  例如,在第 2 种方式创建的 mymultiset 容器的基础上,执行如下代码:
  std::multiset<std::string> copymultiset(mymultiset);
  //等同于
  //std::multiset<std::string> copymultiset = mymultiset;
  该行代码在创建 copymultiset 容器的基础上,还会将 mymultiset 容器中存储的所有元素,全部复制给 copymultiset 容器一份。
 
  另外,C++ 11 标准还为 multiset 类模板新增了移动构造函数,其功能是实现创建新 multiset 容器的同时,利用临时的 multiset 容器为其初始化。比如:
  multiset<string> retMultiset() {
      std::multiset<std::string> tempmultiset{ "http://c.biancheng.net/java/",
                              "http://c.biancheng.net/stl/",
                              "http://c.biancheng.net/python/" };
      return tempmultiset;
  }
  std::multiset<std::string> copymultiset(retMultiset());
  //等同于
  //std::multiset<std::string> copymultiset = retMultiset();
  注意,由于 retMultiset() 函数的返回值是一个临时 multiset 容器,因此在初始化 copymultiset 容器时,其内部调用的是 multiset 类模板中的移动构造函数,而非拷贝构造函数。
  显然,无论是调用复制构造函数还是调用拷贝构造函数,都必须保证这 2 个容器的类型完全一致。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读