加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C++ STL set insert方案详解

发布时间:2022-07-15 22:16:07 所属栏目:语言 来源:互联网
导读:通过前面的学习,我们已经学会如何创建一个 set 容器。在此基础上,如果想向 set 容器中继续添加元素,可以借助 set 类模板提供的 insert() 方法。 为满足不同场景的需要,C++ 11 标准的 set 类模板中提供了多种不同语法格式的 insert() 成员方法,它们各
  通过前面的学习,我们已经学会如何创建一个 set 容器。在此基础上,如果想向 set 容器中继续添加元素,可以借助 set 类模板提供的 insert() 方法。
 
  为满足不同场景的需要,C++ 11 标准的 set 类模板中提供了多种不同语法格式的 insert() 成员方法,它们各自的功能和用法如下所示。
 
  1) 只要给定目标元素的值,insert() 方法即可将该元素添加到 set 容器中,其语法格式如下:
  //普通引用方式传参
  pair<iterator,bool> insert (const value_type& val);
  //右值引用方式传参
  pair<iterator,bool> insert (value_type&& val);
 
  其中,val 表示要添加的新元素,该方法的返回值为 pair 类型。
  以上 2 种格式的区别仅在于传递参数的方式不同,即第一种采用普通引用的方式传参,而第二种采用右值引用的方式传参。右值引用为 C++ 11 新添加的一种引用方式,可阅读《C++ 右值引用》一文做详细了解。
 
  可以看到,以上 2 种语法格式的 insert() 方法,返回的都是 pair 类型的值,其包含 2 个数据,一个迭代器和一个 bool 值:
  当向 set 容器添加元素成功时,该迭代器指向 set 容器新添加的元素,bool 类型的值为 true;
  如果添加失败,即证明原 set 容器中已存有相同的元素,此时返回的迭代器就指向容器中相同的此元素,同时 bool 类型的值为 false。
 
  举个例子:
  #include <iostream>
  #include <set>
  #include <string>
  using namespace std;
  int main()
  {
      //创建并初始化set容器
      std::set<std::string> myset;
      //准备接受 insert() 的返回值
      pair<set<string>::iterator, bool> retpair;
      //采用普通引用传值方式
      string str = "http://c.biancheng.net/stl/";
      retpair = myset.insert(str);
      cout << "iter->" << *(retpair.first) << " " << "bool = " << retpair.second << endl;
      //采用右值引用传值方式
      retpair = myset.insert("http://c.biancheng.net/python/");
      cout << "iter->" << *(retpair.first) << " " << "bool = " << retpair.second << endl;
      return 0;
  }
  程序执行结果为:
  iter->http://c.biancheng.net/stl/ bool = 1
  iter->http://c.biancheng.net/python/ bool = 1
 
  通过观察输出结果不难看出,程序中两次借助 insert() 方法向 set 容器中添加元素,都成功了。
 
  2) insert() 还可以指定将新元素插入到 set 容器中的具体位置,其语法格式如下:
  //以普通引用的方式传递 val 值
  iterator insert (const_iterator position, const value_type& val);
  //以右值引用的方式传递 val 值
  iterator insert (const_iterator position, value_type&& val);
 
  以上 2 种语法格式中,insert() 函数的返回值为迭代器:
  当向 set 容器添加元素成功时,该迭代器指向容器中新添加的元素;
  当添加失败时,证明原 set 容器中已有相同的元素,该迭代器就指向 set 容器中相同的这个元素。
 
  举个例子:
  #include <iostream>
  #include <set>
  #include <string>
  using namespace std;
  int main()
  {
      //创建并初始化set容器
      std::set<std::string> myset;
      //准备接受 insert() 的返回值
      set<string>::iterator iter;
      //采用普通引用传值方式
      string str = "http://c.biancheng.net/stl/";
      iter = myset.insert(myset.begin(),str);
      cout << "myset size =" << myset.size() << endl;
      //采用右值引用传值方式
      iter = myset.insert(myset.end(),"http://c.biancheng.net/python/");
      cout << "myset size =" << myset.size() << endl;
      return 0;
  }
  程序执行结果为:
  myset size =1
  myset size =2
 
  注意,使用 insert() 方法将目标元素插入到 set 容器指定位置后,如果该元素破坏了容器内部的有序状态,set 容器还会自行对新元素的位置做进一步调整。也就是说,insert() 方法中指定新元素插入的位置,并不一定就是该元素最终所处的位置。
  
  程序执行结果为:
  http://c.biancheng.net/python/
  http://c.biancheng.net/stl/
 
  注意,程序第 15 行在初始化 otherset 容器时,选取的是 myset 容器中从第 2 个元素开始(包括此元素)直到容器末尾范围内的所有元素,所以程序输出结果中只有 2 个字符串。

(编辑:应用网_丽江站长网)

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

    热点阅读