Avatar billede nemezis_aalborg Nybegynder
23. marts 2004 - 14:15 Der er 11 kommentarer og
1 løsning

Dynamisk map/table

Hej,

jeg har et lille problem. Jeg har et set af structures, som består af bla. en string og en masse anden information (bl.a. integers).

Disse strings vil jeg gerne have gemt i et map med en dynamisk størrelse, med kombineret string  og integer fra structuren som key (den er unik, så der behøves ikke en hash funktion).. Kan det lade sig gøre med et allerede eksisterende library? Har kigget lidt rundt på nettet, men synes ikke jeg kan finde noget..

Det skal være et ANSI-C++ compliant library :/

På forhånd tak
Avatar billede arne_v Ekspert
23. marts 2004 - 14:22 #1
Kan du ikke bare bruge en af STL containerne ?
Avatar billede arne_v Ekspert
23. marts 2004 - 14:24 #2
map f.eks.
Avatar billede arne_v Ekspert
23. marts 2004 - 14:26 #3
Avatar billede nemezis_aalborg Nybegynder
23. marts 2004 - 17:23 #4
Ja det var også det jeg tænkte på, men har et map ikke en max/standard størrelse.. som man så godt nok kan ændre på fra starten af, men ikke efter man har fyldt noget i containeren.. :/
Avatar billede arne_v Ekspert
23. marts 2004 - 17:35 #5
Det mener jeg ikke.
Avatar billede arne_v Ekspert
23. marts 2004 - 17:38 #6
#include <iostream>
#include <map>

using namespace std;

int main()
{
  map<int,int> m;
  cout << m.max_size() << endl;
  pair<int,int> p(123,456);
  m.insert(p);
  cout << m.max_size() << endl;
  return 0;
}

giver:

4294967295
4294967295

på min PC.
Avatar billede arne_v Ekspert
23. marts 2004 - 17:39 #7
Det er så forkert, men det er en helt anden sag.
Avatar billede arne_v Ekspert
23. marts 2004 - 17:55 #8
#include <iostream>
#include <map>

using namespace std;

int main()
{
  map<int,int> m;
  for(int i=0;i<1000000000;i++)
  {
      pair<int,int> p(i,i+1);
      m.insert(p);
      if(((i+1)%1000000)==0) cout << (i+1) << " inserted" << endl;
  }
  return 0;
}


døde efter 77 mio.
Avatar billede arne_v Ekspert
23. marts 2004 - 17:55 #9
OK ?
Avatar billede bertelbrander Novice
23. marts 2004 - 23:24 #10
max_size() fortælle hvor mange elementer der kan være i map'en (hvis der var uendelig meget hukommelse på maskinen), man bruger size() til at finde ud af hvor mange der er i map'en.

Man kan skrive:
m.insert(make_pair(i, i+1));

i stedet for:

pair<int,int> p(i,i+1);
m.insert(p);
Avatar billede nemezis_aalborg Nybegynder
01. april 2004 - 11:17 #11
Har selv fundet ud af det... lavede min egen container :)
Avatar billede arne_v Ekspert
01. april 2004 - 11:35 #12
Derfor har du da stadig fået et forslag som opfylder alle dine krav ...
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