欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

由2个值组合成key的STL map排序问题

程序员文章站 2022-06-04 16:12:44
...

在C中,map是典型的关联容器或者叫映射容器(associative container),其中的每一个元素都是由key-value这样成对出现的内容组成的,比如学号和学生之类具有一一对应关系的情形,学号可以作为key,学生对象可以作为key所对应的value。很显然这种情况下的key只

在C++中,map是典型的关联容器或者叫映射容器(associative container),其中的每一个元素都是由key-value这样成对出现的内容组成的,比如学号和学生之类具有一一对应关系的情形,学号可以作为key,学生对象可以作为key所对应的value。很显然这种情况下的key只有一个值,但是,在实际工作中,我们可能会经常需要使用多个值组合起来作为key的情况,比如我们要按照学生的视力和身高进行排序,以决定学生的座位排在前面还是后面,而且还是假定要用map来解决这样的问题(当然,这样的问题有很多其它的解决办法),那应该怎么办呢?

(1) 单值作为key的情形

我们知道map在缺省状态下,其数据是按照key的升序进行排列的。假定我们有一个Student类,声明如下:

[cpp] view plaincopy

  1. class Student
  2. {
  3. private:
  4. int id; // 学号
  5. string name; // 姓名
  6. float eyesight; // 视力
  7. float height; // 身高
  8. float chinese; // 语文成绩
  9. float english; // 英文成绩
  10. float math; // 数学成绩
  11. public:
  12. Student(int id, string name,floateyesight, float height,float chinese, float english,float math)
  13. {
  14. this->id = id;
  15. this->name = name;
  16. this->eyesight = eyesight;
  17. this->height = height;
  18. this->chinese = chinese;
  19. this->english = english;
  20. this->math = math;
  21. }
  22. int get_id()
  23. {
  24. return id;
  25. }
  26. string get_name()
  27. {
  28. return name;
  29. }
  30. float get_eyesight()
  31. {
  32. return eyesight;
  33. }
  34. float get_height()
  35. {
  36. return height;
  37. }
  38. float get_chinese()
  39. {
  40. return chinese;
  41. }
  42. float get_english()
  43. {
  44. return english;
  45. }
  46. float get_math()
  47. {
  48. return math;
  49. }
  50. };

那么下面的程序:

[cpp] view plaincopy

  1. int main(int argc,char**argv)
  2. {
  3. mapint, Student> stu_map; // int作为key的类型,Student作为value的类型