SlideShare uma empresa Scribd logo
1 de 30
Maratona de
Programação com STL
MARCOS CASTRO
STL ??
STL
◦ Standard Template Library
◦ Biblioteca padrão do C++
◦ Possui algoritmos, containers, funções...
◦ Exemplo de algoritmo: Busca binária (binary search)
◦ Exemplo de container: vector (sequence container)
◦ Exemplo de função (rotina): binary_search()
◦ STL é uma das vantagens de C++ sobre C
2
Várias estruturas de dados
3
Estruturas genéricas
4
#include <vector>
vector<int> vec;
◦ vec.push_back(1); // insere o elemento 1 (insere no final)
◦ vec.pop_back(); // deleta o último elemento
◦ vec.size(); // retorna o tamanho do vetor
◦ vec.empty(); // o vetor está vazio ??
◦ vec.at(0); // retorna o elemento da posição passada como parâmetro
◦ vec.front(); // acessa o primeiro elemento do vetor
◦ vec.back(); // acessa o último elemento do vetor
◦ vec.clear(); // remove todos os elementos do vetor
◦ http://www.cplusplus.com/reference/vector/
5
#include <stack>
stack<string> pilha;
◦ pilha.empty(); // a pilha está vazia ??
◦ pilha.size(); // retorna o tamanho da pilha
◦ pilha.top(); // acessa o próximo elemento (o elemento do topo)
◦ pilha.push(“STL”); // insere na pilha
◦ pilha.pop(); remove o elemento do topo
◦ http://www.cplusplus.com/reference/stack/
6
#include <set>
Um set não possui elementos repetidos.
Os elementos ficam ordenados crescentemente.
set<double> my_set;
◦ my_set.insert(3.14); // insere elemento no conjunto
◦ my_set.empty(); // o conjunto está vazio ??
◦ my_set.count(3.14); // quantos 3.14 existem ??
◦ my_set.clear(); // você sabe...
7
#include <set>
◦ my_set.erase(it); // remove elementos em um intervalo
◦ set<double>::iterator it = my_set.begin(); // “it” apontando para o primeiro elemento
◦ my_set.erase(it); // remove somente o primeiro elemento
◦ my_set.erase(it, my_set.end()); // remove todos os elementos
◦ my_set.erase(my_set.begin(), my_set.end()); // remove todos os elementos também!
◦ http://www.cplusplus.com/reference/set/
8
#include <set>
Um multiset permite elementos repetidos.
9
#include <queue>
queue<int> fila;
◦ fila.empty(); // você sabe...
◦ fila.push(10); // essa também você sabe...
◦ fila.size(); // adivinha ??
◦ fila.front(); // retorna o primeiro da fila
◦ fila.back(); // retorna o último da fila
◦ fila.pop(); // remove elemento (primeiro da fila)
◦ http://www.cplusplus.com/reference/queue/
10
#include <list>
list<int> my_list;
◦ my_list.empty(); // o que será ??
◦ my_list.size(); // os nomes são os mesmos :)
◦ my_list.front(); // acessa o primeiro elemento
◦ my_list.back(); // acessa o último elemento
◦ my_list.push_front(); // insere o elemento no início
◦ my_list.push_back(); // insere o elemento no final
◦ my_list.pop_back(); // remove o último elemento
◦ my_list.pop_front(); // remove o primeiro elemento
11
#include <list>
list<int> my_list;
◦ my_list.insert(my_list.begin(), 10); // insere a partir de uma posição
◦ my_list.clear(); // deixe seu comentário aqui
◦ my_list.splice(); // insere elementos de uma lista em outra
◦ Supor que my_list possua os elementos 1, 2, 3 e my_list2 possua os elementos 4, 5, 6
◦ Quero inserir os elementos de my_list2 em my_list no início
◦ list<int>::iterator it = my_list.begin(); // “it” aponta para o primeiro elemento de my_list
◦ my_list.splice(it, my_list2); // insere os elementos de my_list2 no início de my_list
◦ my_list agora possui os elementos: 4, 5, 6, 1, 2, 3
◦ http://www.cplusplus.com/reference/list/
12
#include <map>
map<string, int> mapa; // container associativo <chave, valor>
◦ mapa[“C++”] = 10;
◦ mapa[“C”] = 10;
◦ mapa[“python”] = 10;
◦ mapa[“perl”] = 9;
◦ mapa[“java script”] = 9;
◦ mapa[“haskell”] = 8;
◦ mapa[“php”] = 8;
◦ mapa[“java”] = 1;
13
#include <map>
As funções seguem o mesmo padrão:
◦ mapa.size();
◦ mapa.insert(make_pair(“C++”, 10)); // outra forma de inserir
◦ mapa.insert(pair<string, int>(“C”, 10)); // outra forma de inserir
◦ mapa.clear();
◦ http://www.cplusplus.com/reference/map/
14
Priority queue (fila de prioridades)
O que será impresso ??
15
Priority queue (fila de prioridades)
E agora ??
16
esse espaço é importante...
Priority queue (fila de prioridades)
Usando “greater” você tem uma fila de prioridade mínima!
Usando com classe:
17
min ou max ??
Priority queue (fila de prioridades)
Sempre que tiver dúvida, consulte a referência:
◦ http://www.cplusplus.com/reference/queue/priority_queue/
18
#include <algorithm>
A STL possui várias funções (rotinas) que podem otimizar o seu tempo...
Caso você queira ordenar crescentemente um vetor: sort()
19
#include <algorithm>
Caso você queira achar um elemento: find()
20
#include <algorithm>
Gerando permutações: next_permutation()
21
#include <algorithm>
Referência:
◦ http://www.cplusplus.com/reference/algorithm/
22
Exemplo de problema: Agente 004
Acesse: www.urionlinejudge.com.br
23
Agente 004
Que tal utilizar STL na resolução desse problema?
Os próximos slides contém dicas de código com STL para resolvê-lo.
Tente resolver antes de passar para os próximos slides!
24
Agente 004
O problema envolve grafos.
◦ Como codificar usando STL?
O problema fornece as rotas conhecidas por Bino (grafo do Bino) e as rotas
conhecidas somente pelos criminosos (grafo dos criminosos).
Lembrando que os criminosos conhecem todas as rotas possíveis!
O problema quer a quantidade de criminosos que Bino irá eliminar.
O grafo é bidirecional!
Em que a STL pode nos ajudar?
25
Agente 004
Representando um grafo:
Adicionando no grafo:
26
Agente 004
Set usado como fila de prioridades:
O set ordena pelo primeiro parâmetro do pair e depois pelo segundo.
Inserindo na fila:
fila.insert(make_pair(dist_bino[orig], orig));
27
Agente 004
Armazenando o lugar onde está cada criminoso:
28
Agente 004
A solução abaixo utiliza STL, o código está comentado:
https://github.com/marcoscastro/maratona_unifesp/blob/master/URI-1806/URI-1806.cpp
29
Dúvidas?
mcastrosouza@live.com
30

Mais conteúdo relacionado

Mais procurados

Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
Adriano Teixeira de Souza
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
Sidney Roberto
 

Mais procurados (20)

Estrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e HeterogêneasEstrutura de dados - Variáveis homogêneas e Heterogêneas
Estrutura de dados - Variáveis homogêneas e Heterogêneas
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
C Programming - Refresher - Part III
C Programming - Refresher - Part IIIC Programming - Refresher - Part III
C Programming - Refresher - Part III
 
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
 
scalar.pdf
scalar.pdfscalar.pdf
scalar.pdf
 
Retour d'expérience Minio
Retour d'expérience MinioRetour d'expérience Minio
Retour d'expérience Minio
 
STL ALGORITHMS
STL ALGORITHMSSTL ALGORITHMS
STL ALGORITHMS
 
2015: Fundamentos Teóricos da Computação
2015: Fundamentos Teóricos da Computação2015: Fundamentos Teóricos da Computação
2015: Fundamentos Teóricos da Computação
 
GUIDE.pptx
GUIDE.pptxGUIDE.pptx
GUIDE.pptx
 
Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!
 
Qualité de code et bonnes pratiques
Qualité de code et bonnes pratiquesQualité de code et bonnes pratiques
Qualité de code et bonnes pratiques
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
 
Seance 1 - Programmation en langage C
Seance 1 - Programmation en langage CSeance 1 - Programmation en langage C
Seance 1 - Programmation en langage C
 
alphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administrationalphorm.com - Formation PostgreSQL administration
alphorm.com - Formation PostgreSQL administration
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Funções em C
Funções em CFunções em C
Funções em C
 
Conception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmationConception et implémentation d'un nouveau langage de programmation
Conception et implémentation d'un nouveau langage de programmation
 

Destaque

Destaque (20)

Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
 
Algoritmo de Kosaraju
Algoritmo de KosarajuAlgoritmo de Kosaraju
Algoritmo de Kosaraju
 
Backtracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntosBacktracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntos
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Agrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansAgrupamento (clustering) - K-Means
Agrupamento (clustering) - K-Means
 
Python - Set
Python - SetPython - Set
Python - Set
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Binary heap
Binary heapBinary heap
Binary heap
 
04 tia portal hands on - scl v11 -v1
04 tia portal   hands on - scl v11 -v104 tia portal   hands on - scl v11 -v1
04 tia portal hands on - scl v11 -v1
 
Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.Maratona de programação 2009. Exercícios para Iniciantes.
Maratona de programação 2009. Exercícios para Iniciantes.
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
 

Semelhante a Maratona de Programação com STL

C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
Duda Dornelles
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 

Semelhante a Maratona de Programação com STL (20)

Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Python 04
Python 04Python 04
Python 04
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
Apostila aed
Apostila aedApostila aed
Apostila aed
 
Minicurso de jQuery
Minicurso de jQueryMinicurso de jQuery
Minicurso de jQuery
 
Estruturas
EstruturasEstruturas
Estruturas
 
Testes em Aplicações Web com Cactus
Testes em Aplicações Web com CactusTestes em Aplicações Web com Cactus
Testes em Aplicações Web com Cactus
 
Mágica com qt’s meta object system
Mágica com qt’s meta object systemMágica com qt’s meta object system
Mágica com qt’s meta object system
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 

Mais de Marcos Castro

Mais de Marcos Castro (13)

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Agrupamento de sequências biológicas
Agrupamento de sequências biológicasAgrupamento de sequências biológicas
Agrupamento de sequências biológicas
 
Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Bioinformática com Biopython
Bioinformática com BiopythonBioinformática com Biopython
Bioinformática com Biopython
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

Maratona de Programação com STL

  • 1. Maratona de Programação com STL MARCOS CASTRO
  • 2. STL ?? STL ◦ Standard Template Library ◦ Biblioteca padrão do C++ ◦ Possui algoritmos, containers, funções... ◦ Exemplo de algoritmo: Busca binária (binary search) ◦ Exemplo de container: vector (sequence container) ◦ Exemplo de função (rotina): binary_search() ◦ STL é uma das vantagens de C++ sobre C 2
  • 5. #include <vector> vector<int> vec; ◦ vec.push_back(1); // insere o elemento 1 (insere no final) ◦ vec.pop_back(); // deleta o último elemento ◦ vec.size(); // retorna o tamanho do vetor ◦ vec.empty(); // o vetor está vazio ?? ◦ vec.at(0); // retorna o elemento da posição passada como parâmetro ◦ vec.front(); // acessa o primeiro elemento do vetor ◦ vec.back(); // acessa o último elemento do vetor ◦ vec.clear(); // remove todos os elementos do vetor ◦ http://www.cplusplus.com/reference/vector/ 5
  • 6. #include <stack> stack<string> pilha; ◦ pilha.empty(); // a pilha está vazia ?? ◦ pilha.size(); // retorna o tamanho da pilha ◦ pilha.top(); // acessa o próximo elemento (o elemento do topo) ◦ pilha.push(“STL”); // insere na pilha ◦ pilha.pop(); remove o elemento do topo ◦ http://www.cplusplus.com/reference/stack/ 6
  • 7. #include <set> Um set não possui elementos repetidos. Os elementos ficam ordenados crescentemente. set<double> my_set; ◦ my_set.insert(3.14); // insere elemento no conjunto ◦ my_set.empty(); // o conjunto está vazio ?? ◦ my_set.count(3.14); // quantos 3.14 existem ?? ◦ my_set.clear(); // você sabe... 7
  • 8. #include <set> ◦ my_set.erase(it); // remove elementos em um intervalo ◦ set<double>::iterator it = my_set.begin(); // “it” apontando para o primeiro elemento ◦ my_set.erase(it); // remove somente o primeiro elemento ◦ my_set.erase(it, my_set.end()); // remove todos os elementos ◦ my_set.erase(my_set.begin(), my_set.end()); // remove todos os elementos também! ◦ http://www.cplusplus.com/reference/set/ 8
  • 9. #include <set> Um multiset permite elementos repetidos. 9
  • 10. #include <queue> queue<int> fila; ◦ fila.empty(); // você sabe... ◦ fila.push(10); // essa também você sabe... ◦ fila.size(); // adivinha ?? ◦ fila.front(); // retorna o primeiro da fila ◦ fila.back(); // retorna o último da fila ◦ fila.pop(); // remove elemento (primeiro da fila) ◦ http://www.cplusplus.com/reference/queue/ 10
  • 11. #include <list> list<int> my_list; ◦ my_list.empty(); // o que será ?? ◦ my_list.size(); // os nomes são os mesmos :) ◦ my_list.front(); // acessa o primeiro elemento ◦ my_list.back(); // acessa o último elemento ◦ my_list.push_front(); // insere o elemento no início ◦ my_list.push_back(); // insere o elemento no final ◦ my_list.pop_back(); // remove o último elemento ◦ my_list.pop_front(); // remove o primeiro elemento 11
  • 12. #include <list> list<int> my_list; ◦ my_list.insert(my_list.begin(), 10); // insere a partir de uma posição ◦ my_list.clear(); // deixe seu comentário aqui ◦ my_list.splice(); // insere elementos de uma lista em outra ◦ Supor que my_list possua os elementos 1, 2, 3 e my_list2 possua os elementos 4, 5, 6 ◦ Quero inserir os elementos de my_list2 em my_list no início ◦ list<int>::iterator it = my_list.begin(); // “it” aponta para o primeiro elemento de my_list ◦ my_list.splice(it, my_list2); // insere os elementos de my_list2 no início de my_list ◦ my_list agora possui os elementos: 4, 5, 6, 1, 2, 3 ◦ http://www.cplusplus.com/reference/list/ 12
  • 13. #include <map> map<string, int> mapa; // container associativo <chave, valor> ◦ mapa[“C++”] = 10; ◦ mapa[“C”] = 10; ◦ mapa[“python”] = 10; ◦ mapa[“perl”] = 9; ◦ mapa[“java script”] = 9; ◦ mapa[“haskell”] = 8; ◦ mapa[“php”] = 8; ◦ mapa[“java”] = 1; 13
  • 14. #include <map> As funções seguem o mesmo padrão: ◦ mapa.size(); ◦ mapa.insert(make_pair(“C++”, 10)); // outra forma de inserir ◦ mapa.insert(pair<string, int>(“C”, 10)); // outra forma de inserir ◦ mapa.clear(); ◦ http://www.cplusplus.com/reference/map/ 14
  • 15. Priority queue (fila de prioridades) O que será impresso ?? 15
  • 16. Priority queue (fila de prioridades) E agora ?? 16 esse espaço é importante...
  • 17. Priority queue (fila de prioridades) Usando “greater” você tem uma fila de prioridade mínima! Usando com classe: 17 min ou max ??
  • 18. Priority queue (fila de prioridades) Sempre que tiver dúvida, consulte a referência: ◦ http://www.cplusplus.com/reference/queue/priority_queue/ 18
  • 19. #include <algorithm> A STL possui várias funções (rotinas) que podem otimizar o seu tempo... Caso você queira ordenar crescentemente um vetor: sort() 19
  • 20. #include <algorithm> Caso você queira achar um elemento: find() 20
  • 23. Exemplo de problema: Agente 004 Acesse: www.urionlinejudge.com.br 23
  • 24. Agente 004 Que tal utilizar STL na resolução desse problema? Os próximos slides contém dicas de código com STL para resolvê-lo. Tente resolver antes de passar para os próximos slides! 24
  • 25. Agente 004 O problema envolve grafos. ◦ Como codificar usando STL? O problema fornece as rotas conhecidas por Bino (grafo do Bino) e as rotas conhecidas somente pelos criminosos (grafo dos criminosos). Lembrando que os criminosos conhecem todas as rotas possíveis! O problema quer a quantidade de criminosos que Bino irá eliminar. O grafo é bidirecional! Em que a STL pode nos ajudar? 25
  • 26. Agente 004 Representando um grafo: Adicionando no grafo: 26
  • 27. Agente 004 Set usado como fila de prioridades: O set ordena pelo primeiro parâmetro do pair e depois pelo segundo. Inserindo na fila: fila.insert(make_pair(dist_bino[orig], orig)); 27
  • 28. Agente 004 Armazenando o lugar onde está cada criminoso: 28
  • 29. Agente 004 A solução abaixo utiliza STL, o código está comentado: https://github.com/marcoscastro/maratona_unifesp/blob/master/URI-1806/URI-1806.cpp 29