set/multiset容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了set/multiset容器相关的知识,希望对你有一定的参考价值。

参考技术A set容器在插入数据的时候会自动对其排序,比如插入的数据是“1 3 4 2 5”,那么到输出的时候可能就变成了“1 2 3 4 5”。 set/multuset属于关联式容器,它们的底层结构是二叉树。set和multiset的区别在于,set不允许容器内部有重复元素,而multiset允许有重复元素。不管是set还是multiset,在使用的时候,只需要包含一个头文件<set>。

set容器在插入数据的时候,没有push_back,只有intsert;即使插入了重复元素,也不会报错,但是插入不会成功,在输出的时候不会输出有重复的元素。

set容器不支持resize操作。

erase也有一个重载版本,可以传进来一个元素,对这个元素进行删除,和list里的remove效果一样。

对于set容器而言,cout统计到的结果要么为0,要么为1。

set容器不可以插入重复的数据,而multiset的可以插入重复数据。这是因为前者在插入数据的时候会进行一个检查,插入数据的同时会返回插入结果。但是multiset不会对其进行检查,所以可以插入从复数据。

对于set容器的insert而言,返回值是一个对组。 pair<set<int>::iterator, bool> ,第一个是一个迭代器,表示插入元素的位置;第二个是一个布尔类型的数据,表述是否插入成功。而multiset的insert函数的返回值仅仅是一个迭代器,表示是插入元素的位置,没有表示插入是否成功的布尔数据类型。

对组是成对出现的一组数据,如果在函数中需要返回两个值,可以考虑使用对组。

对组的使用中 .first 表示第一个数据, .second 表示第二个数据。

set默认会给插入的据进行升序排列。接下来我们尝试着利用仿函数,把升序排列改为降序排列。

对于自定义数据类型,是一定要自定参数排序规则的。因为set容器在插入的时候就要排序,编译器内部是不知道怎么对自定义类型进行排序的,如果不指定,程序根本无法运行。

以上是关于set/multiset容器的主要内容,如果未能解决你的问题,请参考以下文章

effective STL

Set和multiset容器

set/ multiset 容器

stl之multiset容器的应用

容器学习 set multiset

STL标准库-容器-set与multiset