В C# IComparer<T> — это интерфейс: любой класс, реализующий его метод Compare, может сказать сортировке, какой элемент идёт первым. Другой компаратор меняет порядок, не меняя саму сортировку.
Отсортируйте людей по key:
name: по имени (порядковое сравнение символов, поэтому заглавные буквы идут раньше строчных), а при равных именах — по возрасту.age: по возрасту, сначала младшие, а при равном возрасте — по имени.
Реализуйте sort_by_key(names, ages, key).
Входные данные
names, ages: Люди (одинаковой длины).
key: "name" или "age".
Выходные данные
Верните имена в отсортированном порядке.
Ограничения
0 ≤ число людей ≤ 100,000
0 ≤ возраст ≤ 150
Примеры
Ввод:
key = "age"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Ожидаемый вывод:
expected = ["Bo", "Lin", "Ada"]
Ввод:
std::string key = "age";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Ожидаемый вывод:
std::vector<std::string> expected = {"Bo", "Lin", "Ada"};
Ввод:
string key = "age";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Ожидаемый вывод:
string[] expected = new string[] {"Bo", "Lin", "Ada"};
Пояснение
Bo и Lin обоим по 30, поэтому они идут по имени раньше Ada (36): ["Bo", "Lin", "Ada"].
Ввод:
key = "name"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Ожидаемый вывод:
expected = ["Ada", "Bo", "Lin"]
Ввод:
std::string key = "name";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Ожидаемый вывод:
std::vector<std::string> expected = {"Ada", "Bo", "Lin"};
Ввод:
string key = "name";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Ожидаемый вывод:
string[] expected = new string[] {"Ada", "Bo", "Lin"};
Пояснение
Алфавитный порядок: ["Ada", "Bo", "Lin"].
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Сортируйте пары (name, age), а не два отдельных списка.
Подсказка 2
Выбранный ключ задаёт основной порядок, другое поле разрешает равенства.
Подсказка 3
Сравнивайте строки порядково, чтобы заглавные шли раньше строчных.
Ожидаемая сложность
время O(n log n), доп. память O(n)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.