如何在数组中按变量(int-最小到最大)对数组进行排序

How to sort arrays by variable (int - least to greatest) in arrays?

本文关键字:数组 排序 int- 变量      更新时间:2023-10-16

我有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;
}

如何按年龄对所有这些数组进行排序?年龄是一个整数,从最小到最大?谢谢

创建一个lambda作为

auto func = [](Person p1, Person p2)
{
   return p1.age1 < p2.age2;
}

使用std::sort对项目进行排序

std::sort(person.begin(),person.end(),func);

希望它能帮助

工作代码看起来像

#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();
    }
}

使用#include<algorithm>附带的std::sort(begin, end, 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);