我不熟悉的set

 同样的我着重介绍那些我不怎么用到的系列,同时,常用的我就点一下。

我们都知道set底层是用红黑树实现的,红黑树是一种已排序的树,所以我们通过迭代器来访问节点元素的时候,并不可以改变它,如果随意改变,那排序规则就乱套了。

讲API之前,现介绍一个 对组(pair)的概念。

对组(pair)将一对值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用pair的两个公有属性first和second访问。

创建对组的方法

一、使用拷贝构造

pair<string, int> pair1(string("name"), 20); cout << pair1.first << endl; //访问pair第一个值 cout << pair1.second << endl;//访问pair第二个值

二、使用make_pair

pair<string, int> pair2 = make_pair("name", 30); cout << pair2.first << endl; cout << pair2.second << endl;

对组可以方便的将不同数据类型作为返回值,一次返回两个数值。

构造,赋值和大小操作

set<T> st;          //set默认构造函数。 set(const set &st); //拷贝构造函数 swap(set st);       //交换两个集合容器 size();             //返回容器中元素的数目 empty();            //判断容器是否为空

与前几篇说的一致。

插入与删除

pair<iterator,bool> insert(elem);  //在容器中插入元素。 void insert(beg,end)     //插入[beg,end)范围元素 iterator erase(pos);     //删除pos迭代器所指的元素,返回下一个元素的迭代器。 iterator erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 size_type erase(elem);   //删除容器中值为elem的元素。 void clear();            //清除所有元素

这边强调一下erase和insert:

关于erase:

  • 既可以删除迭代器指向的元素,也可以删除指定的元素值。与list一致。
  • 删除迭代器的时候返回指向的下一个迭代器。
  • 删除指定元素的时候,返回的是这个元素在容器中的个数。(set为0或1,multiset可以大于1)

关于insert:

  • 唯一的一个插入元素的动作。
  • 插入元素时,返回一个对组。第一个成员是指向新插入值或已存在的这个值的迭代器,第二个成员表示插入成功与否(不存在的,新插入的为真,已存在的不需新插入为假)。
  • 范围插入的时候,没有返回值。

查找函数

这才是今天的重点。

iterator find(key);  //查找键key是否
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信