C++ 如何在数组中按变量(int-从最小到最大)对数组排序?

C++ 如何在数组中按变量(int-从最小到最大)对数组排序?,c++,arrays,sorting,c++11,int,C++,Arrays,Sorting,C++11,Int,我有10个这样的阵列: #include <stdio.h> #include <iostream> #include <cstdlib> #include <sstream> using namespace std; struct person { int age, i; char name[20], dob[20], pob[20], gender[7]; }; int main () { int i =

我有10个这样的阵列:

    #include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <sstream>

using namespace std;

struct person
{
    int age, i;
    char name[20], dob[20], pob[20], gender[7];
};

int main ()
{
    int i = 0;
    person person[10];
    for (i; i<10; i++)
    {
        cout << "Please enter your name, date of birth, place of birth, gender, and age, separated by a space.\nFor example, John 1/15/1994 Maine Male 20: ";
        scanf("%s %s %s %s %d", &person[i].name, &person[i].dob, &person[i].pob, &person[i].gender, &person[i].age);
        printf("%s %s %s %s %d \n", &person[i].name, &person[i].dob, &person[i].pob, &person[i].gender, person[i].age);
    }
    sort(person)
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构人
{
国际年龄,i;
字符名称[20],dob[20],pob[20],性别[7];
};
int main()
{
int i=0;
个人[10];
对于(i;i创建lambda作为

auto func = [](Person p1, Person p2)
{
   return p1.age1 < p2.age2;
}
希望能有帮助

工作代码看起来像

#include <iostream>
#include <algorithm>
#include <array>

struct Person{
    std::string name_, dob_, pob_;
    char gender_;
    int age_;

    Person(std::string name,std::string dob, std::string pob,char gender,int age)
    :name_(name),dob_(dob),pob_(pob),gender_(gender),age_(age)
    {
    }

    void print() const
    {
        std::cout<<name_<<" , "<<dob_<<" , "<<pob_<<" , "<<gender_<<" , "<<age_<<'\n'; 
    }
};

int main()
{


    std::array<Person,10> arr{
        Person{"AA","12/12/12","BB",'M',24},
        Person{"AA","12/12/12","BB",'M',23},
        Person{"AA","12/12/12","BB",'M',22},
        Person{"AA","12/12/12","BB",'M',21},
        Person{"AA","12/12/12","BB",'M',20},
        Person{"AA","12/12/12","BB",'M',34},
        Person{"AA","12/12/12","BB",'M',33},
        Person{"AA","12/12/12","BB",'M',32},
        Person{"AA","12/12/12","BB",'M',31},
        Person{"AA","12/12/12","BB",'M',30}
    };
    auto func = [] (Person p1,Person p2)
    {
        return p1.age_ < p2.age_;
    };
    std::sort(arr.begin(),arr.end(),func);

    for(auto const & item:arr)
    {
        item.print();
    }
}
#包括
#包括
#包括
结构人{
std::字符串名称,dob,pob;
性别特征;
国际年龄;
Person(std::string name,std::string dob,std::string pob,char-gender,int-age)
:姓名、出生日期、出生日期、性别、年龄
{
}
void print()常量
{
std::cout使用
std::sort(begin,end,comparator)
函数,该函数随
#include
一起提供自定义比较器,在这种情况下,该比较器将

bool comparator(Person i, Person j) {
     return i.age < j.age;
}

std::sort(&Person[0], &Person[len], comparator);
//better alternative
std::sort(std::begin(Person), std::end(Person), comparator);
bool比较器(人i、人j){
返回i.age
您应该使用std::vector@Mikhail这是为什么?@johnny880与数组相比,它们在空间和时间上都很有效。可能是@NickyC的重复。他没有使用向量,所以它可能不是重复的。虽然他应该使用向量……我不明白。对不起,你能在代码中实现它吗?谢谢。编辑的作品。也许吧我没有解释清楚。请再看一遍。您首先阅读了C语言的基本输入/输出,请参阅代码中的
scanf
printf
行。一旦您正确读取了数据,这里建议的任何解决方案都会起作用。我不明白。对不起,您能在代码中实现它吗?谢谢。排序函数为您提供了函数排序的多样性。您只需将数组的开始和结束传递给它。由于您的数据是自定义数据,它无法知道如何对其进行排序。您可能会得到突然的结果。这就是为什么第三个参数是函数指针。排序函数每次尝试比较两个Person对象时都会调用它。如果第一个元素比第二个元素小,否则为真。@johnny880p。也许我没有解释清楚。请看一下again@FaizHalde:如果
len
是元素数,则第一个示例应该是
std::sort(&Person[0],&Person[len],comparator);
。第二个参数必须是结束迭代器后的一个参数。
bool comparator(Person i, Person j) {
     return i.age < j.age;
}

std::sort(&Person[0], &Person[len], comparator);
//better alternative
std::sort(std::begin(Person), std::end(Person), comparator);