C++ STL multiset容器说明
发布时间:2022-07-15 11:27 所属栏目:51 来源:互联网
导读:前面章节中,对 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 个容器的类型完全一致。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读