Сортировка массива по двум полям С++ [закрыт]

128
02 февраля 2021, 14:20
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 1 год назад.

Улучшить вопрос

Есть массив, в которым храниться данные о геометрических фигур, и именно: код фигуры , цвет , материал фигуры , объем , площадь поверхности и радиус . Нужно отсортировать по площади поверхности и цвету. Например , я создал 6 фигур ( 2 красных , 2 желтых , 2 зеленых ) , сначала нужно спросить какой цвет нас интересует ( например желтый ) , и программа должно отсортировать те фигуры только желтого цвета.

struct
figuri{  char kod[5];
      char tvet [15];
      char material[15];
      float r,plosiadi,obiem;
      } sf[100],

Подскажите пожалуйста как это сделать

Answer 1

Один из возможных способов - предоставить кастомный компаратор (функцию сравнения) и использовать его со стандартным алгоритмом 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); }
READ ALSO
Хеширование методом цепочек

Хеширование методом цепочек

При хешировании с цепочками списки элементов с данным хеш-значением будут упорядоченнымиКак этот подход повлияет на стоимость успешного...

93
Как запретить доступ в инет своей программе?

Как запретить доступ в инет своей программе?

Использую стороннюю библиотеку, из которой периодически идёт обращение на их сервер с целью обновленияКак запретить? СВОЕЙ ПРОГРАММЕ любой...

108
Возведение в степень не работает

Возведение в степень не работает

Обычная задача по возведению в степеньЕсть 2 функции

124