C++ 如何在数组中按变量(int-从最小到最大)对数组排序?
我有10个这样的阵列: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 =
#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);