当前位置:   article > 正文

set(集合),multiset容器及pair队组的创建

set(集合),multiset容器及pair队组的创建

1.set的基本概念:所有元素再插入时自动按升序排序,set/multiset属于关联式容器,底层结构是用二叉树实现的

set与multiset区别:

set中不允许容器中有重复的元素

multiset允许容器中有重复的元素

2.set的构造函数

 3.set的大小和交换

4.set的插入和删除操作

 5.set的查找和统计

  1. void test01()
  2. {
  3. set<int> s;
  4. s.insert(10);
  5. s.insert(40);
  6. s.insert(20);
  7. s.insert(50);
  8. s.insert(20);
  9. s.insert(20);
  10. set<int>::iterator it=s.find(200);//find的返回值是迭代器,没找到返回s.end()
  11. if (it != s.end())
  12. {
  13. cout << "找到元素" << *it << endl;
  14. }
  15. else
  16. {
  17. cout << "没找到元素" << endl;
  18. }
  19. int num = s.count(20);//对于set而言没有重复元素,只返回0和1
  20. cout << num << endl;
  21. }

 6.set不能插入重复元素multiset能插入重复元素的原因

set插入数据的同时会返回插入结果,表示插入成功

multiset不会检测数据,因此可以插入重复数据

set.insert的底层代码:返回值是pair对组类型

multiset.insert的底层代码:返回值是迭代器

 7.pair队组的创建

 第一个元素first,第二个元素second

  1. void test01()
  2. {
  3. pair<string, int> p1("张三", 16);
  4. cout << "姓名:" << p1.first << " 年龄:" << p1.second << endl;
  5. pair<string, int> p2 = make_pair("李四", 15);
  6. cout << "姓名:" << p2.first << " 年龄:" << p2.second << endl;
  7. }

8.set容器的排序(利用仿函数可以改变排序规则)

set存放内置数据类型排序

  1. class mycompare
  2. {
  3. public://仿函数
  4. bool operator()(int v1, int v2)const//这里要加const
  5. {
  6. return v1 > v2;//降序
  7. }
  8. };
  9. void test01()
  10. {
  11. set<int> s1;
  12. s1.insert(20);
  13. s1.insert(50);
  14. s1.insert(30);
  15. s1.insert(10);
  16. s1.insert(40);
  17. for (set<int>::iterator it = s1.begin(); it != s1.end(); it++)//默认升序打印
  18. {
  19. cout << *it << " ";
  20. }
  21. cout << endl;
  22. set<int,mycompare> s2;//指定排序规则,两个参数都是数据类型//利用类里的仿函数可以指定排序规则
  23. s2.insert(20);
  24. s2.insert(50);
  25. s2.insert(30);
  26. s2.insert(10);
  27. s2.insert(40);
  28. for (set<int,mycompare>::iterator it = s2.begin(); it != s2.end(); it++)//降序打印
  29. {
  30. cout << *it << " ";
  31. }
  32. }

set存放自定义数据类型排序

自定义类型都会指定排序规则

  1. class Person
  2. {
  3. public:
  4. Person(string name,int age)
  5. {
  6. this->m_name = name;
  7. this->m_age = age;
  8. }
  9. string m_name;
  10. int m_age;
  11. };
  12. class mycompare
  13. {
  14. public:
  15. bool operator()(const Person &p1,const Person &p2)const//这里要加const
  16. {
  17. return p1.m_age>p2.m_age;//降序
  18. }
  19. };
  20. void test01()
  21. {
  22. set<Person,mycompare> s1;
  23. Person p1("张三", 16);//如果年龄相同还要制定另一套规则
  24. Person p2("李四", 18);
  25. Person p3("王五", 15);
  26. Person p4("赵六", 14);
  27. s1.insert(p1);
  28. s1.insert(p2);
  29. s1.insert(p3);
  30. s1.insert(p4);
  31. for (set<Person,mycompare>::iterator it = s1.begin(); it != s1.end(); it++)//对于自定义数据类型,指定排序规则打印
  32. {
  33. cout << "姓名:" << it->m_name << " 年龄:" << it->m_age << endl;
  34. }
  35. }

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号