Método eficiente de armazenamento utilizando containers (Vector e Map)
Publicado por Robson Lopes (última atualização em 20/12/2009)
[ Hits: 7.680 ]
Para quem deseja um exemplo de containers sendo utilizado com uma classe própria, esse será um bom exemplo.
/* * Nome: Robson Lopes * Nick: Rob_Som * Linguagem: C++ * Titulo: Método eficiente de Armazenamento, utilizando containers(Vector, Map, string). * Objetivo: Cadastrar pessoas em ordem alfabética com eficiencia O(log(n)) */ #include <iostream> #include <vector> #include <map> #include <string> using std::map; using std::vector; using std::string; using std::cin; using std::cout; using std::endl; class Pessoa{ private: /*Atributos*/ string Nome; string Sobrenome; int Idade; public: Pessoa(string , string , int ); //Construtor /*Funções membros*/ void setNome(string n){ this->Nome = n; } void setSobrenome(string s){ this->Sobrenome = s; } void setIdade(int i){ this->Idade = i > 0 ? i : 1; } //validação string getNome() const { return this->Nome; } string getSobrenome() const { return this->Sobrenome; } int getIdade() const { return this->Idade; } void PrintPessoa() const; }; Pessoa::Pessoa(string n, string s, int i){ this->setNome(n); this->setSobrenome(s); this->setIdade(i); } void Pessoa::PrintPessoa() const { cout << "Nome: " << this->getNome() << endl; cout << "Sobrenome: " << this->getSobrenome() << endl; cout << "Idade: " << this->getIdade() << endl; } int main(void){ /*Na Chave utilizo container string. Para o Valor utilizo o container vector armazenando um * objeto do tipo Pessoa. */ map< string, vector<Pessoa> > Mymap; /*Iterator para correr o container map. Lembrando que será ordenado pela chave(nome completo). * Fique tranquilo, que o map se encarregará disso. */ map< string, vector<Pessoa> >::iterator itM; /*Iterator para acessar o container Vector que possui o Objeto Pessoa */ vector<Pessoa>::iterator itV; int opcao, idade; string nome, sobrenome, completo, chave; do{ cout << "1. Para Adicionar" << endl; cout << "2. Para Lista" << endl; cout << "3. Para Sair" << endl; cout << "Opção: "; cin >> opcao; if(opcao == 1){ cout << endl << "Digite o Nome: "; cin >> nome; cout << "Digite o Sobrenome: "; cin >> sobrenome; cout << "Digite a Idade: "; cin >> idade; completo = nome + sobrenome; Pessoa *A = new Pessoa(nome, sobrenome, idade); Mymap[completo].push_back(*A); } else if(opcao == 2){ cout << endl; for(itM = Mymap.begin(); itM != Mymap.end(); itM++){ /*(*itM).first eu pego a chave e begin() é a primeira posicão do Vector */ itV = Mymap[(*itM).first].begin(); itV->PrintPessoa(); cout << endl; } } }while(opcao != 3); return 0; }
Controle de maior idade em C++
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta