legongju.com
我们一直在努力
2025-01-11 05:16 | 星期六

如何对C++ struct数组进行排序和查找

在 C++ 中,可以使用库中的sort()函数对结构体数组进行排序,使用binary_search()` 函数进行查找。这里有一个示例展示了如何实现这两个操作:

首先,定义一个结构体类型,并包含所需的数据成员:

#include
#include
using namespace std;

struct Student {
    int id;
    string name;
};

接下来,编写一个比较函数,用于在排序时比较结构体中的特定数据成员。在本例中,我们将根据学生的 ID 进行排序:

bool compareStudents(const Student &a, const Student &b) {
    return a.id < b.id;
}

然后,创建一个结构体数组,并添加一些数据:

int main() {
    Student students[] = {
        {3, "Alice"},
        {1, "Bob"},
        {4, "Charlie"},
        {2, "David"}
    };
    
    int n = sizeof(students) / sizeof(Student);

现在,使用 sort() 函数对结构体数组进行排序:

    sort(students, students + n, compareStudents);

接下来,使用 binary_search() 函数查找特定元素。为此,请提供要查找的 ID 值:

    int targetId = 2;
    bool found = binary_search(students, students + n, targetId,
                              [](const Student &s, int id) { return s.id < id; });

最后,输出排序后的数组以及查找结果:

    cout << "Sorted array: "<< endl;
    for (int i = 0; i < n; ++i) {
        cout<< students[i].id << ": "<< students[i].name<< endl;
    }

    if (found) {
        cout << "Found student with ID: "<< targetId<< endl;
    } else {
        cout << "Student not found"<< endl;
    }

    return 0;
}

完整代码如下:

#include
#include
using namespace std;

struct Student {
    int id;
    string name;
};

bool compareStudents(const Student &a, const Student &b) {
    return a.id < b.id;
}

int main() {
    Student students[] = {
        {3, "Alice"},
        {1, "Bob"},
        {4, "Charlie"},
        {2, "David"}
    };
    
    int n = sizeof(students) / sizeof(Student);

    sort(students, students + n, compareStudents);

    int targetId = 2;
    bool found = binary_search(students, students + n, targetId,
                              [](const Student &s, int id) { return s.id < id; });

    cout << "Sorted array: "<< endl;
    for (int i = 0; i < n; ++i) {
        cout<< students[i].id << ": "<< students[i].name<< endl;
    }

    if (found) {
        cout << "Found student with ID: "<< targetId<< endl;
    } else {
        cout << "Student not found"<< endl;
    }

    return 0;
}

运行此程序,你将看到已排序的学生数组以及查找结果。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/93798.html

相关推荐

  • c#如何获取当前程序的路径

    c#如何获取当前程序的路径

    在C#中,你可以使用System.IO.Path和System.Reflection命名空间来获取当前程序的路径。下面是一个示例代码:
    using System;
    using System.IO;
    us...

  • c#中如何调用python

    c#中如何调用python

    在C#中调用Python脚本,可以使用Pythonnet库(Python for .NET)或者IronPython库。这里我将分别介绍这两种方法。 使用Pythonnet库(Python for .NET): 首先,...

  • c#封装的步骤是什么

    c#封装的步骤是什么

    C# 封装主要包括以下几个步骤: 定义类(Class):创建一个新的类,用于存放需要封装的属性和方法。类是面向对象编程中的基本单位,它将数据(属性)和操作数据的...

  • c#字符串如何去重

    c#字符串如何去重

    在C#中,可以使用LINQ(Language Integrated Query)来实现字符串去重。下面是一个示例代码:
    using System;
    using System.Linq; class Program
    ...

  • 在C++中使用struct数组需要注意哪些问题

    在C++中使用struct数组需要注意哪些问题

    在C++中使用struct数组时,有一些常见的问题和注意事项: 定义和初始化:确保你正确地定义了struct并为其分配了足够的内存空间。如果你不知道数组的大小,可以使...

  • C++序列化对数据结构的要求是什么

    C++序列化对数据结构的要求是什么

    C++序列化对数据结构的要求主要包括以下几点: 可复制性(Copyable):被序列化的数据结构应该能够被复制。这意味着数据结构中的所有成员变量都应该是可复制的,...

  • 在C++项目中如何规划序列化的策略

    在C++项目中如何规划序列化的策略

    在C++项目中,序列化是将对象状态转换为字节流(或其他可存储或传输格式)的过程,以便于存储、传输或共享。反序列化则是相反的过程,从字节流恢复对象状态。为了...

  • C++序列化与反序列化的实现原理

    C++序列化与反序列化的实现原理

    C++ 序列化和反序列化是将对象的状态信息转换为可以存储或传输的格式的过程,以及从这种格式恢复对象状态的过程 序列化: 序列化是将对象的状态信息转换为字节流...