经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
set容器几个关键函数
来源:cnblogs  作者:cckk4467  时间:2018/10/19 9:19:59  对本文有异议

set在OI中非常好用,归纳几种常见的功能qwq

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<set>
  4. //set容器常见用法
  5. using namespace std;
  6. //用仿函数可以做到自定义排序规则
  7. class R
  8. {
  9. public:
  10. bool operator()(const int &pre,const int &bac)
  11. {
  12. return pre>bac;//保证序列前大于后
  13. }
  14. };
  15. set<int/*,R*/> s; //去掉注释就会使用仿函数,
  16. int main()
  17. {
  18. s.insert(5);
  19. s.insert(4);
  20. s.insert(3);
  21. s.insert(2);
  22. s.insert(1);
  23. for(set<int>::iterator i=s.begin();i!=s.end();i++)
  24. cout<<*i<<" "; //print 1 2 3 4 5
  25. //erase
  26. cout<<endl<<"Erase";
  27. cout<<endl<<s.erase(3)<<endl; //删除成功返回1,否则返回0
  28. for(set<int>::iterator i=s.begin();i!=s.end();i++)
  29. cout<<*i<<" "; //print 1 2 4 5
  30. //uper_bound & lower_bound
  31. //uper_bound(x):返回 s中 满足大于x 的最小元素 的迭代器
  32. //lower_bound(x):返回 s中 满足大于等于x 的最小元素 的迭代器
  33. cout<<endl<<"uper_bound & lower_bound";
  34. cout<<endl<<*s.upper_bound(3); //print 4
  35. cout<<endl<<*s.lower_bound(3)<<endl; //print 4
  36. cout<<endl<<*s.upper_bound(4); //print 5
  37. cout<<endl<<*s.lower_bound(4)<<endl; //print 4
  38. cout<<endl<<(s.lower_bound(6)==s.end())<<endl; //print 1 当没有一个元素大于等于6时,返回尾迭代器
  39. //insert
  40. cout<<endl<<"insert"<<endl;
  41. s.insert(6);
  42. for(set<int>::iterator i=s.begin();i!=s.end();i++)
  43. cout<<*i<<" "; //print 1 2 4 5 6
  44. return 0;
  45. }

值得注意的是,当我们用仿函数改变规则使序列从大到小后,upper_bound和lower_bound的意义就不是注释所描述的那样了。现在这两个函数的功能会很奇怪,下面我用一种适用于任何情况的简单非专业描述来说明这两个函数的功能

lower_bound(x) :

  1. 当容器中存在等于x的元素,返回该元素迭代器
  2. 否则,假设按照容器元素排列规则将x插入容器合适位置,那么返回的是插入后 x下一个(右边)元素的迭代器,若无元素则返回尾迭代器

exa.

  • 6 5 3 2 1 x=4,假设插入后:6 5 4 3 2 1  此时 返回元素3的迭代器
  • # % ^ & * (  ,假设插入¥(假设这是有序序列),# ¥ % ^ & * (  此时 返回元素%的迭代器

upper_bound(x) :

  就是没有1.规则的lower_bound(x) 。。。其他一样

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号