Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Hashtabelle?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.07.2010, 18:07 Uhr
Lenja



Hallihallo,

neues Programm, neues Problem

Ich generiere mir mittels C++ zufällig eine Folge von Zahlen gegeben und berechne einen bestimmten Wert dazu.
Es sind immer die gleichen Zahlen, nur in unterschiedlicher Reihenfolge.
Das mache ich mehrmals.
Nun möchte ich mit Hilfe einer Hashtabelle prüfen, ob ich für eine bestimmte Reihenfolge der Zahlen schon einmal den Wert bestimmt habe.
Irgendwie komme ich aber nicht so richtig damit klar...
Wie mache ich das denn?
Theoretisch muss ich ja nach der Speicherung nicht wieder die ganzen Einträge in der Tabelle durchgehen, um einen bestimmten zu finden,oder?

Liebe Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.07.2010, 18:21 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du einen ausreichend aktuellen Compiler hast, der TR1 unterstützt (beispielsweise gcc ab etwa 4.0 oder MSVC ab 2008), gibt es darin eine Klassenvorlage std::tr1::unorderet_set, die eine Hashtable modelliert.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.07.2010, 23:41 Uhr
Lenja



Danke erstmal!

Ich habe nun doch keine Hashtabelle verwendet, sondern es mit std::map gemacht. Scheint auch ganz gut zu funktionieren :-)

Wie messe ich denn die Zeit, die mein Programm braucht bis es komplett durchgelaufen ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.07.2010, 00:13 Uhr
0xdeadbeef
Gott
(Operator)


Ah. Naja, verlässliche Performance-Messungen sind recht kompliziert; die Laufzeit deines Programms hängt in der Realität nicht allein von deinem Programm ab - was sonst noch auf der Maschine läuft, das Verhalten des Betriebssystems und der Peripheriegeräte, bei Netzwerkanwendungen auch das anderer Systeme spielen eine Rolle.

Welche Messgrößen letztendlich für dich interessant sind, ist manchmal schwierig festzustellen (deswegen gibt es beispielsweise Profiler).

Das vorausgeschickt, ein einfacher Weg, relativ brauchbare Laufzeitmessungen für kleine Programmteile durchzuführen, ist folgender:

C++:
#include <ctime>
#include <iostream>

int main() {
  std::clock_t time_beg = std::clock();

  // Programmteil hier ein paar Millionen mal laufen lassen

  std::clock_t time_end = std::clock();

  std::cout << static_cast<double>(time_end - time_beg) / CLOCKS_PER_SEC << std::endl;
}


std::clock() gibt die vom Programm benutzte CPU-Zeit zurück. Damit wird die Zeit, die das Betriebssystem mit anderen Programmen verbringt, nicht berücksichtigt, was eine große Variable eliminiert. Die Ergebnisse werden immer noch variieren, aber es sollte dir zumindest eine Größenordnung geben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.07.2010 um 00:25 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: