#include #include #include #include #include #include #include using Posicao = std::array; using Velocidade = std::array; using Aceleracao = std::array; Posicao aceleracao_uniforme(Posicao x0, Velocidade v0, Aceleracao a); enum class Semana { domingo, segunda, terca, quarta, quinta, sexta, sabado }; enum class TipoDia { normal, feriado, facultativo }; enum class Ordem { primeira, segunda, terceira, quarta, quinta, sexta }; Semana hoje = Semana::quarta; TipoDia tipo_hoje = TipoDia::normal; Ordem ordem = Ordem::quarta; struct Pessoa { int id; std::string nome; std::string funcao; int ano_ingresso; }; enum class Ordena { por_id, por_nome, por_funcao, por_ingresso }; Pessoa joao; Pessoa le_pessoa(std::istream &is) { Pessoa quem; is >> quem.id; is >> quem.nome; is >> quem.funcao; is >> quem.ano_ingresso; return quem; } void mostra_colaboradores(std::vector const &pessoas, Ordena ordem) { auto ordenado{pessoas}; std::function fordem; switch (ordem) { case Ordena::por_id: fordem = [](Pessoa const &a, Pessoa const &b) { return a.id < b.id; }; break; case Ordena::por_nome: fordem = [](Pessoa const &a, Pessoa const &b) { return a.nome < b.nome; }; break; case Ordena::por_funcao: fordem = [](Pessoa const &a, Pessoa const &b) { return a.funcao < b.funcao; }; break; case Ordena::por_ingresso: fordem = [](Pessoa const &a, Pessoa const &b) { return a.ano_ingresso < b.ano_ingresso; }; break; } std::sort(begin(ordenado), end(ordenado), fordem); for (auto pessoa: ordenado) { std::cout << pessoa.id << "\t" << pessoa.nome << "\t" << pessoa.funcao << "\t" << pessoa.ano_ingresso << std::endl; } } int main(int, char *[]) { std::vector todos; for (int i = 0; i < 3; ++i) { todos.push_back(le_pessoa(std::cin)); } mostra_colaboradores(todos, Ordena::por_nome); return 0; }