vector容器中存放结构体变量

转载:vector容器中存放结构体变量   作者:v_xchen_v

vector容器中存放结构体变量有两种方式:

1)存放结构体变量本身

2)存放结构体变量的指针

先介绍第一种方式,存放结构体变量到vector容器中,示例如下:

结构体

 

 
  1. struct stu

  2. {

  3. int num;

  4. float grade;

  5. };


定义一个结构体变量的vector容器

 

 

std::vector<stu> v;


添加

 

 

 
  1. stu student;

  2. int num;

  3. float grade;

  4. std::cin>>num>>grade;

  5. student.num = num;

  6. student.grade = grade;

  7. v.push_back(student);


遍历

 

 
  1. for(std::vector<stu>::iterator it=v.begin();it!=v.end();it++)

  2. {

  3. std::cout<<(*it).num<<" "<<(*it).grade<<std::endl;

  4. }




sort自定义比较函数

 

 

 
  1. bool compare(const stu& st1,const stu& st2)

  2. {

  3. return st1.grade>st2.grade;

  4. }

sort(v.begin(),v.end(),compare);

 

完整代码:

 

 
  1. #include <iostream>

  2. #include <vector>

  3. #include <algorithm>

  4. struct stu

  5. {

  6. int num;

  7. float grade;

  8. };

  9. bool compare(const stu& st1,const stu& st2)

  10. {

  11. return st1.grade>st2.grade;

  12. }

  13.  
  14. int main()

  15. {

  16. int n,k;

  17. std::cin>>n>>k;

  18.  
  19. std::vector<stu> v;

  20. for(int i=0;i<n;i++)

  21. {

  22. stu student;

  23. int num;

  24. float grade;

  25. std::cin>>num>>grade;

  26. student.num = num;

  27. student.grade = grade;

  28. v.push_back(student);

  29. }

  30. sort(v.begin(),v.end(),compare);

  31.  
  32. for(std::vector<stu>::iterator it=v.begin();it!=v.end();it++)

  33. {

  34. std::cout<<(*it).num<<" "<<(*it).grade<<std::endl;

  35. }

  36. return 0;

  37. }

 

以上方法是将这个结构体变量的副本放在vector中,结构体变量放在了内存栈中,

还有另外一种方式是将结构体变量的指针放在vector中,结构体变量放在内存堆中,

参考:http://blog.csdn.net/feliciafay/article/details/9128385

定义一个结构体变量指针的vector容器

 

std::vector<stu*> v;


添加

 

 

 
  1. stu *student = new stu();

  2. int num;

  3. float grade;

  4. std::cin>>num>>grade;

  5. student->num = num;

  6. student->grade = grade;

  7. v.push_back(student);


遍历

 

 

 
  1. for(std::vector<stu*>::iterator it=v.begin();it!=v.end();it++)

  2. {

  3. std::cout<<(*it)->num<<" "<<(*it)->grade<<std::endl;

  4. }

sort自定义排序

 

 

 
  1. bool compare(const stu* st1,const stu* st2)

  2. {

  3. return st1->grade>st2->grade;

  4. }

sort(v.begin(),v.end(),compare);



完整代码:

 

 

 
  1. #include <iostream>

  2. #include <vector>

  3. #include <algorithm>

  4. struct stu

  5. {

  6. int num;

  7. float grade;

  8. };

  9. bool compare(const stu* st1,const stu* st2)

  10. {

  11. return st1->grade>st2->grade;

  12. }

  13.  
  14. int main()

  15. {

  16. int n,k;

  17. std::cin>>n>>k;

  18.  
  19. std::vector<stu*> v;

  20. for(int i=0;i<n;i++)

  21. {

  22. stu *student = new stu();

  23. int num;

  24. float grade;

  25. std::cin>>num>>grade;

  26. student->num = num;

  27. student->grade = grade;

  28. v.push_back(student);

  29. }

  30. sort(v.begin(),v.end(),compare);

  31.  
  32. for(std::vector<stu*>::iterator it=v.begin();it!=v.end();it++)

  33. {

  34. std::cout<<(*it)->num<<" "<<(*it)->grade<<std::endl;

  35. }

  36. return 0;

  37. }


结果同上

 


参考:http://noi.openjudge.cn/ch0110/01/

  • 15
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值