📜  对向量进行排序 c++ (1)

📅  最后修改于: 2023-12-03 14:53:39.229000             🧑  作者: Mango

以向量为主题进行排序 - C++

排序向量是计算机程序中最基本的要求之一。在C++中,可以使用内置的函数进行排序,也可以使用自定义的算法实现。在本文中,我们将讨论几种不同的排列向量的方法。

内置排序函数

C++标准库中提供了许多排序函数,其中最常见的是 std::sort。该函数接受两个迭代器作为参数,表示待排序的向量的开始和结束位置。以下是使用 std::sort 对向量进行排序的示例代码:

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
    std::sort(vec.begin(), vec.end());

    for (auto i : vec) {
        std::cout << i << " ";
    }
    std::cout << std::endl;
}

在这个示例中,我们使用了 std::vector 存储整数。我们使用 std::sort 函数对向量进行排序,并在控制台输出排序后的结果。您可以尝试改变输入向量的元素并重新运行程序,以验证输出结果。

自定义的排序算法

尽管上述内置函数的排序效率较高,但有时开发人员需要根据自己的需求实现自定义排序算法。

例如,我们可能需要按多个条件对向量进行排序,例如学生姓名和在班级中的排名。在这种情况下,我们可以使用 std::sort 函数来实现。

以下是按姓名和排名排序的示例代码:

#include <vector>
#include <algorithm>
#include <iostream>

struct Student {
    std::string name;
    int rank;
};

bool compareName(const Student& a, const Student& b) {
    return a.name < b.name;
}

bool compareRank(const Student& a, const Student& b) {
    return a.rank < b.rank;
}

int main() {
    std::vector<Student> students = {{"Alice", 2}, {"Bob", 1}, {"Charlie", 3}};

    std::sort(students.begin(), students.end(), compareName);
    std::cout << "Sort by name:" << std::endl;
    for (auto i : students) {
        std::cout << i.name << " " << i.rank << std::endl;
    }

    std::sort(students.begin(), students.end(), compareRank);
    std::cout << "Sort by rank:" << std::endl;
    for (auto i : students) {
        std::cout << i.name << " " << i.rank << std::endl;
    }
    return 0;
}

在这个示例中,我们定义了一个名为 Student 的结构体,其中包含学生的姓名和排名。然后,我们定义了两个自定义的比较函数,compareNamecompareRank,一个用于按姓名排序,一个用于按排名排序。

最后,我们将我们的学生存储在向量中,并使用 std::sort 函数和自定义的排序函数对它们进行排序,并在控制台输出排序后的结果。

总而言之,C++提供了许多内置的和自定义的排序算法,可以根据您的个人需求对向量进行排序。无论您是处理数字向量还是自定义结构体向量,都可以轻松地排序它们,使您的算法更加高效。