专业编程基础技术教程

网站首页 > 基础教程 正文

C++结构体和排序 c++结构体数组排序

ccvgpt 2024-12-30 02:19:17 基础教程 2 ℃

NOI入门组大纲

什么是结构体?

在实际问题中,一组数据往往具有不同的数据类型。例如,人口大普查时,我们需要记录每一位公民的姓名,年龄,性别,住址,身份证号码等信息。这些信息分别要用整型,字符型,字符串型来记录。

为了更方便地解决这类问题,C++语言给出了另一种构造数据类型——结构体。

C++结构体和排序 c++结构体数组排序

结构体基本用法

创建一个学生结构体(注意:结构体名一般首字母大写,与普通数据类型名区分开):

struct Student{
    string name;
    int age;
    int score;
    char gender;
    bool is_leader;
};

创建结构体变量初始化赋值:

1.统一赋值:使用 { }

Student xiaoming = {"小明", 10, 300, 'm', true};

2.分别赋值:变量名.属性名

Student xiaoming;

xiaoming.name = "小明";
xiaoming.age = 10;
xiaoming.score = 300;
xiaoming.gender = 'm';
xiaoming.is_leader = true;

结构体数组

struct Student{
    string name;
    int age;
    int score;
}students[N];

int main() {

    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> students[i].name >> students[i].age >> students[i].score;

    for(int i = 1; i <= n; i++)
        cout << students[i].name << " ";

    return 0;
}

结构体排序

自定义比较函数

// 按照分数从大到小排序,如果分数相同,按照年龄从小大到排序
bool cmp(Student& a, Student& b){
    if(a.score == b.score)
        return a.age < b.age;
    return a.score > b.score;
}

sort(students + 1, students + n + 1, cmp);

运算符重载

// 按照分数从大到小排序,如果分数相同,按照年龄从小大到排序
struct Student{
    string name;
    int age;
    int score;
    bool operator < (const Student& x) const{
        if(score == x.score)
            return age < x.age;
        return score > x.score;
    }
}students[N];

sort(students + 1, students + n + 1);

结构体 数据对齐方法和节省空间原则

  • 计算如下结构体类型所占的字节数(先根据自己的想法手动计算下再使用 sizeof() 运算符来计算验证下)。
struct A{
    int a;
    char b;
    float f;
};

字节数 12。

struct B{
    long long num;
    char sex;
    int age;
};

字节数 16。

结构体总大小为所有成员中最大对齐数的整数倍。

快乐刷题

  • P364 谁考了第k名
  • P265 紧急措施
  • P565 年龄排序
  • P633 [NOIP 2007 普及组] 奖学金

Tags:

最近发表
标签列表