Выражение должно иметь тип класса | структуры
Необходимо сделать сортировку под дате рождения. Чтоб уменьшить код в 3 раза я засунул цикл в цикл :,), но у меня не получается заменять то, что должно сортироваться
void sorting(NOTE f[]) {
NOTE temp = {}; //переменная, что необходима для сортировки
NOTE b;
for (int a = 0; a != 3; a++) {
switch (a) {
case 0: b = f.day;
case 1: b = f.month;
case 2: b = f.year;
}
for (int i = 0; i < 7; i++) { //сортировка методом пузырька
for (int j = 0; j < 7 - i; j++) {
if (f[j] > f[j + 1]) {
temp = f[j];
f[j] = f[j + 1];
f[j + 1] = temp;
}
}
}
}
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Структуру придумал, а синтаксис вы поймёте.
// g++ strpoi.cpp -o strpoi
struct NOTE{
int day;
int month;
int year;
};
void sorting(NOTE f[]) {
NOTE temp ; //переменная, что необходима для сортировки
// внутренний указатель на элемент структуры
int NOTE::* bp[3] = { &NOTE::year , &NOTE::month , &NOTE::day };
for (int i = 0; i < 7; i++) { //сортировка методом пузырька
// тут маленькая ошибка с индексами
for (int j = 0; j < 7 - i - 1; j++) {
for (int a = 0; a != 3; a++) {
if (f[j].*(bp[a]) > f[j + 1].*(bp[a])) {
temp = f[j];
f[j] = f[j + 1];
f[j + 1] = temp;
break;
}
if (f[j].*(bp[a]) < f[j + 1].*(bp[a]))
break;
}
}
}
}
# include <iostream>
int main(){
NOTE f[7]={{1,6,12},{2,5,8},{4,4,5},{3,2,7},{1,7,12},{2,6,12},{2,6,8}};
sorting(f);
for(int i=0;i<7;++i)
std::cout<<"{"<<f[i].year<<"/"<<f[i].month<<"/"<<f[i].day<<"}"<<std::endl;
}
проверка :
> ./strpoi
{5/4/4}
{7/2/3}
{8/5/2}
{8/6/2}
{12/6/1}
{12/6/2}
{12/7/1}