Problema
Em C#, um IComparer<T> é uma interface: qualquer classe que implemente seu método Compare pode dizer a uma ordenação qual item vem primeiro. Escolher um comparador diferente muda a ordem sem mudar a ordenação.
Ordene as pessoas por key:
name: por nome (ordem ordinal de caracteres, então letras maiúsculas vêm antes de minúsculas), e por idade quando os nomes forem iguais.age: por idade, do mais novo para o mais velho, e por nome quando as idades forem iguais.
Implemente sort_by_key(names, ages, key).
Input
names, ages: As pessoas (mesmo tamanho).
key: "name" ou "age".
Output
Retorne os nomes em ordem ordenada.
Restrições
0 ≤ número de pessoas ≤ 100,000
0 ≤ idade ≤ 150
Exemplos
Entrada:
key = "age"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Saída esperada:
expected = ["Bo", "Lin", "Ada"]
Entrada:
std::string key = "age";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Saída esperada:
std::vector<std::string> expected = {"Bo", "Lin", "Ada"};
Entrada:
string key = "age";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Saída esperada:
string[] expected = new string[] {"Bo", "Lin", "Ada"};
Explicação
Bo e Lin têm ambos 30, então são ordenados por nome antes de Ada (36): ["Bo", "Lin", "Ada"].
Entrada:
key = "name"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]
Saída esperada:
expected = ["Ada", "Bo", "Lin"]
Entrada:
std::string key = "name";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};
Saída esperada:
std::vector<std::string> expected = {"Ada", "Bo", "Lin"};
Entrada:
string key = "name";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};
Saída esperada:
string[] expected = new string[] {"Ada", "Bo", "Lin"};
Explicação
Ordem alfabética: ["Ada", "Bo", "Lin"].
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Ordene pares (name, age) em vez de duas listas separadas.
Dica 2
A chave escolhida define a ordem principal; o outro campo desempata.
Dica 3
Compare strings em ordem ordinal para que as maiúsculas venham antes das minúsculas.
Complexidade esperada
tempo O(n log n), espaço extra O(n)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.