当前位置:   article > 正文

C++ set容器遍历问题_c遍历set

c遍历set

set容器存放内置数据类型  如int char等,可以用*p (p是迭代器) 的方式

但是存放自定义的数据类型,比如类,*it就不行了

问题已经解决。。。*it外面需要加上括号括起来  。。晕死。

  1. #include<iostream>
  2. #include<string>
  3. #include<set>
  4. #include<algorithm>
  5. using namespace std;
  6. void test(){
  7. class Pet{
  8. public:
  9. int age;
  10. string name;
  11. string type;
  12. Pet(int age,string name,string type){
  13. this->age=age;
  14. this->name=name;
  15. this->type=type;
  16. }
  17. };
  18. Pet p1(3,"polo","cat");
  19. Pet p2(10,"aimi","dog");
  20. Pet p3(9,"tom","dog");
  21. Pet p4(4,"niangao","cat");
  22. Pet p5(3,"lily","dog");
  23. //类的排序规则 pet
  24. class petcom {
  25. public:
  26. // 仿函数 重载加号
  27. bool operator()(const Pet &p1,const Pet &p2) {
  28. if(p1.age==p2.age){
  29. return p1.type>p2.type;
  30. }
  31. else{
  32. return p1.age>p2.age;
  33. }
  34. }
  35. };
  36. set<Pet,petcom>s;
  37. s.insert(p1);
  38. s.insert(p2);
  39. s.insert(p3);
  40. s.insert(p4);
  41. s.insert(p5);
  42. for(auto it=s.begin();it!=s.end();it++){
  43. cout<<it->age<<" "<<it->name<<" "<<it->type<<endl;
  44. }
  45. }
  46. int main(){
  47. test();
  48. system("pause");
  49. return 0;
  50. }

将宠物按照年龄  降序排列,如果年龄相同按照种类(dog在cat前面)  

但是遍历时如果写成*it.age  *it.name就会报错。必须用指针。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/141722
推荐阅读
相关标签
  

闽ICP备14008679号