Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 1 год назад.
Есть массив, в которым храниться данные о геометрических фигур, и именно: код фигуры , цвет , материал фигуры , объем , площадь поверхности и радиус . Нужно отсортировать по площади поверхности и цвету. Например , я создал 6 фигур ( 2 красных , 2 желтых , 2 зеленых ) , сначала нужно спросить какой цвет нас интересует ( например желтый ) , и программа должно отсортировать те фигуры только желтого цвета.
struct
figuri{ char kod[5];
char tvet [15];
char material[15];
float r,plosiadi,obiem;
} sf[100],
Подскажите пожалуйста как это сделать
Один из возможных способов - предоставить кастомный компаратор (функцию сравнения) и использовать его со стандартным алгоритмом std::sort. Например, так:
std::vector<Fig> figs = // заполняем контейнер фигурами
std::sort(figs.begin(), figs.end(), [](const Fig& l, const Fig& r) {
return std::tie(l.one, l.two) < std::tie(r.one, r.two); }
При этом стоит иметь в виду, что для полей one и two должен быть предоставлен корректный оператор меньше <, поэтому, во избежании неожиданного поведения проще всего сишные строки заменить на std::string, или же добавить временные переменные внутри компаратора. Пример для one типа const char* или массива char (а-ля сишная строка):
std::sort(figs.begin(), figs.end(), [](const Fig& l, const Fig& r) {
std::string ls = l.one;
std::string rs = r.one;
return std::tie(ls, l.two) < std::tie(rs, r.two); }
Сборка персонального компьютера от Artline: умный выбор для современных пользователей