I am fairly new to C++ and pointers, and would greatly appreciate any help. I am trying to print a sorted array of pointers without changing the original array of structs. I cannot properly sort the pointers. I am using the std::sort that worked on the original array, but I fail at using it on pointers. To make things worse, my failed attempts all change the original. Thank you for your time.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct Student
{
int age;
char name[30];
};
void displayStudent(Student s)
{
cout << endl<< s.age<< " "<< s.name;
}
int main()
{
Student s1;
s1.age = 10;
strcpy(s1.name, "Guy");
Student s2;
s2.age = 33;
strcpy(s2.name, "Buddy");
Student s3;
s3.age = 16;
strcpy(s3.name, "Friend");
Student s4;
s4.age = 55;
strcpy(s4.name, "Pal");
Student myClass[4];
myClass[0] = s1;
myClass[1] = s2;
myClass[2] = s3;
myClass[3] = s4;
Student *myClassPt;
myClassPt = &myClass[0];
Student *SBN[4];
Student *SBG[4];
Student *SBA[4];
for (int i = 0; i < 4; i++)
{
SBN[i] = &(myClassPt[i]);
SBA[i] = &(myClassPt[i]);
}
cout << "Original" << endl;
for (int i = 0; i < 4; i++)
{
displayStudent(myClass[i]);
}
std::sort(*SBN, *SBN + 4, [](Student &a, Student &b){ return a.name < b.name; });
std::sort(*SBA, *SBA + 3, [](Student const &a, Student const &b){ return a.age < b.age; });
cout <<endl<<endl<< "Sorted by name" << endl;
for (int i = 0; i < 4; i++)
{
displayStudent(*SBN[i]);
}
cout << endl << endl << "Sorted by age" << endl;
for (int i = 0; i < 4; i++)
{
displayStudent(*SBA[i]);
}
cout << endl <<endl<< "Original" << endl;
for (int i = 0; i < 4; i++)
{
displayStudent(myClass[i]);
}
return 0;
}