Fórum Ubuntu Linux - PT
Suporte Técnico => Programação e Scripts => Tópico iniciado por: Diego_Rocha em 12 de Agosto de 2007, 16:30
-
Pra quem naum conhece o map e o vector do C++ aqui vai um exemplo,
#include <iostream>
#include <map>
#include <vector>
#include <string>
int main(){
std::map< std::string, std::string > MyMap; //aqui criamos o map
/*aqui criamos o iterator do map para podermos navegar pelo mapa */
std::map< std::string, std::string >::iterator MyIterMap;
std::vector< std::string > MyVector; //criamos o vetor
/*aqui iniciamos o iterator pro vetor lembrando que sempre o iterator tem q ser igual o vetor entaum se seu vetor é std::vector<int> o iterator tbm tem q ser std::vector<int>::iterator de int*/
std::vector< std::string >::iterator MyIterVector;
MyVector.push_back("vetor1");
MyVector.push_back("vetor2");
MyVector.push_back("vetor3");/* aqui adicionas no final do vetor os valores*/
MyMap["Teste1"] = "map1";
MyMap["Teste2"] = "map2";
MyMap["Teste3"] = "map3";/*aqui adiconamos valores no mapa*/
/*agora vamos imprimir os conteudos do vetor e do mapa usando os iteratores */
MyIterVector = MyVector.begin(); //aqui colocas o iterator no começo do vetor
MyIterMap = MyMap.begin(); //aqui a mesma coisa
while( MyIterVector != MyVector.end() ) /* enquanto o iterator for diferente do final do vetor ele vai imprimir o resultado */
{
std::cout << *MyIterVector<<std::endl;
MyIterVector++; //aqui passamos o iterator pra proxima posição
}
while( MyIterMap != MyMap.end() ) //aqui a mesma coisa
{
/* aqui pegamos o primeiro valor do map ou seja o valor MyMap["teste1"] esse valor pra podermos imprimir seu valor que é "map1" */
std::string values = (*MyIterMap).first;
std::cout << MyMap[values] <<std::endl;
MyIterMap++;
}
return 0;
}
resultado
vetor1
vetor2
vetor3
map1
map2
map3
Agora vcs devem estar se pergutando eu posso usar um map com vetor a resposta é sim voce pode usar um std::map< std::string, std::vector<std::string> > que é um mapa de vetor de string, pode tbm usar uma mapa de vetor de struct, e pode usar ate um mapa de mapa de vetor de string mais isso voce tem que descobrir como fazer sozinho ;) pode usar template tbm pra ter mapas e vectores que possam assumir varios tipos, só pra naum deixar na curiosidade aqui vai um exemplo de mapa de vetor de struct
#include <iostream>
#include <map>
#include <vector>
#include <string>
struct di
{
std::string query;
int length;
};
int main()
{
std::map< std::string, std::vector< di > > teste;
std::map< std::string, std::vector< di > >::iterator iter;
std::vector< di >::iterator viter;
di diego;
diego.query ="diego";
diego.length = strlen("diego");
teste["teste1"].push_back( diego );
std::cout << teste["teste1"][0].length <<std::endl;
diego.query = "rocha";
diego.length = strlen("rocha");
teste["teste2"].push_back( diego );
iter = teste.begin();
while( iter != teste.end())
{
std::string valor = (*iter).first;
viter = teste[valor].begin();
while( viter != teste[valor].end())
{
std::cout << (*viter).query <<" "<<(*viter).length<<std::endl;
viter++;
}
iter++;
}
return 0;
}
resultado
5
diego 5
rocha 5
é isso ae espero q ajude alguem t++
-
A STL é extremamente poderosa e por ser feita com templates você pode usar com qualquer coisa.
Usei map mesmo apenas uma vez. Tinha uma enumeração indicando possíveis modulações (BPSK, 4PSK, 16QAM, 64QAM, etc) e queria guardar em uma mapa cada valor possível da enumeração e quantos bits tem em cada símbolo da modulação.
Bom, o que interessa é que eu queria associar duas coisas diferentes e únicas. Depois coloquei cada par em um vetor.
-
quanto mais conheço C++ mais surpreso fico, map vetor lista stack etc... são coisas q me encanta xD, semana passada descobri o boost e to adorando estudar ele, pricipalmente os codigos fontes e os exemplos que vem com ele, o boost usa e abusa de templates e é justamente os templates q eu estou estudando agora, é isso ae C++ rulz ;)