Avatar billede rbj_fp Nybegynder
20. september 2004 - 15:12 Der er 8 kommentarer og
1 løsning

Map - og hjælp

Hej Alle jer eksperter.

Jeg er ved at rette i et ældre( og meget rodet) c++ program.
I dette program findes den følgende struktur.

MAP(long ,MAP(long, LIST(cGIP*))) BordListe;

Og denne skal jeg gerne have en løkke(eller flere nestede), som løber denne igennem. Det er pga cGIP*, som giver memeory-leaks, og derfor har jeg behov for at kunne få adgang til alle disse for at kunne nedlægge dem explicit.
Avatar billede arne_v Ekspert
20. september 2004 - 15:15 #1
Er MAP og LIST makroer som bruger STL map og list ?
Avatar billede arne_v Ekspert
20. september 2004 - 15:17 #2
Men ellers skal du vel bare have 3 løkker inden i hinanden.

yderst - den yderste map
midten - den inderste map
inderst - listen
Avatar billede rbj_fp Nybegynder
20. september 2004 - 15:18 #3
Jeg har forsøgt med iteratorer, men kan ikke rigtig få det til at virke.
Men det er sikkert mig som laver fejlen :-)
Avatar billede arne_v Ekspert
20. september 2004 - 15:26 #4
Du kunne jo prøve at poste din kode med 3 løkker med iteratorer.
Avatar billede bertelbrander Novice
20. september 2004 - 19:55 #5
#include <map>
#include <list>
#include <iostream>

std::map<long , std::map<long, std::list<std::string > > > BordListe;

int main()
{
  std::list<std::string> List1;
  List1.push_back("Ole");
  List1.push_back("Peter");
  List1.push_back("Hans");

  std::list<std::string> List2;
  List2.push_back("Nielsen");
  List2.push_back("Jensen");
  List2.push_back("Hansen");

  std::list<std::string> List3;
  List3.push_back("Danmark");
  List3.push_back("Norge");
  List3.push_back("Finland");

  std::map<long, std::list<std::string> >Map1;
  Map1.insert(std::make_pair(1, List1));
  Map1.insert(std::make_pair(2, List2));

  std::map<long, std::list<std::string> >Map2;
  Map2.insert(std::make_pair(3, List3));

  BordListe.insert(std::make_pair(10, Map1));
  BordListe.insert(std::make_pair(20, Map2));

  std::map<long, std::map<long, std::list<std::string> > >::iterator it1;

  for(it1 = BordListe.begin(); it1 != BordListe.end(); it1++)
  {
      std::cout << it1->first << std::endl;
      std::map<long, std::list<std::string> >::iterator it2;
      for(it2 = it1->second.begin(); it2 != it1->second.end(); it2++)
      {
        std::cout << it2->first << std::endl;
        std::list<std::string>::iterator it3;
        for(it3 = it2->second.begin(); it3 != it2->second.end(); it3++)
            std::cout << *it3 << std::endl;
      }

  }
}
Avatar billede rbj_fp Nybegynder
21. september 2004 - 07:50 #6
Tak for kommentarene, jeg vender lige tilbage når jeg har haft tid til at teste dem. :-)
Avatar billede rbj_fp Nybegynder
30. september 2004 - 14:15 #7
Hej.... gider du ikke lige sende et svar bertelbrander.
Avatar billede bertelbrander Novice
30. september 2004 - 20:17 #8
Nej, det gider jeg ikke; jeg vil helst ikke have point.

Fik du det til at virke?
Avatar billede rbj_fp Nybegynder
01. oktober 2004 - 07:56 #9
jeps med lidt modifikationerne, så mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester