Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Tabelle mit einem 'struct'

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 < [ 2 ]
000
06.09.2005, 11:37 Uhr
~Tobias91
Gast


Hallo Leute

Habe eine Tabelle mit verschiedenen Daten. Verwirklicht habe ich diese in einer Struktur.

Struct:

C++:
struct sEntry
{
   int nID;
   string sBeschreibung;
   int nWert;
};



Daten:

C++:
Const sEntry Infos [] =
{
   0, “Beschreibung0“, 987,
   1, “Beschreibung1“, 4
   2, “Beschreibung2“, 1234,
   3, “Beschreibung3“, 56,

   // 4 bis 14 momentan nicht vorhanden

   15, “Beschreibung15“, 34,
   16, “Beschreibung16“, 99,
   17, “Beschreibung17“, 159,

   // 18 bis 111 momentan nicht vorhanden

   112, “Beschreibung112“, 159,
   113, “Beschreibung113“, 159,
   114, “Beschreibung114“, 159,

   // 115 bis 322 momentan nicht vorhanden

   321, “Beschreibung114“, 159,
   322, “Beschreibung114“, 159,
   323, “Beschreibung114“, 159,
   // ...
}




Nun mein Problem:
Bislang waren meine nID’s mit dem Index von ’Infos’ identisch. Wenn ich nun aber einzelne nID’s nicht benötige wie z.B. 4-14 ist die Übereinstimmung nicht mehr vorhanden.

Da sich meine Id’s aber im bereich von 0 bis 1000 liegen und zwischendurch leicht mal 100 Id’s nicht existieren, möchte ich nicht unbedingt die nicht verwendetet Einträge mit Platzhaltern (Leer-Einträgen) versehen.

Kann mir jemand von euch sagen, wie ich das nun anstellen kann. Wenn ich die Daten mit der nID 113 auslesen kann. Also ohne den Infos-Index (z.B. für nID 113 wäre er ja 8) zu wissen?

Oder gibt es eine andere Möglichkeit dies zu lösen? (Die Tabelle ändert sich so gut wie nie und ich möchte die Daten in ein .h file schreiben.)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.09.2005, 11:42 Uhr
Airdamn



Spontaneinfälle: Übersetzungtabelle oder Suchalgo (Linear, Binär)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.09.2005, 11:48 Uhr
~Tobias91
Gast


Ach ja, bislang konnte ich bei Übereinstimmung der ID mit dem Index ganz einfach die Daten mit folgenden Zeilen lesen.


C++:
   int id = 113;           // als Beispiel  
   String sInfoText;
   Int = nInfoWert;

   sInfoText = Infos[id].sBeschreibung;
   nInfoWert = Infos[id].sWert;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.09.2005, 11:49 Uhr
virtual
Sexiest Bit alive
(Operator)


Genau: mit bsearch in der Tabelle suchen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.09.2005, 11:50 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


leerentrys reinhaun ginge auch
--
class God : public ChuckNorris { };

Dieser Post wurde am 06.09.2005 um 11:50 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.09.2005, 11:57 Uhr
~Tobias91
Gast


@virtual: Kannst du mir vieleicht sagen, wie das funktioniert?

@FloSoft: Ist das schlau, wenn man von möglichen 1000 ID's vieleicht 600 leere Einträge hat?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.09.2005, 11:59 Uhr
virtual
Sexiest Bit alive
(Operator)


@Tobias91
Also 1000 Einträge sind echt nicht die Welt. Da kannst Du bequem alle Entries anlegen, eben auch leerentries.

bsearch ist eine Standardfunktion und funktioniert analog zu qsort. Schau mal in die Doku der Funktionen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.09.2005, 12:23 Uhr
~Tobias91
Gast


@virtual: Du hast schon Recht. 1000 Einträge sind nicht die Welt. Aber was ist wenn ich die ID 9966 habe? (Oder höher. Die ID kann ich leider nicht selber bestimmen.)

Mit 'bsearch' kann ich also meine Tabelle bestehen lassen und in ihr nach meiner ID suchen? Gibt diese Funktion dann den Index zurück?
Habe im google leider nichts schlaues gefunden. Und auch nicht in der online MSDN Library.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.09.2005, 12:49 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~Tobias91:

Habe im google leider nichts schlaues gefunden. Und auch nicht in der online MSDN Library.

Das ist außerordentlich erstaunlich, denn wenn ich bei Google bsearch als Suchbegriff eingebe, dann ist das erste angezeigte Ergebnis bereits ein volltreffer. Sogar incl. Beispiel.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 06.09.2005 um 12:50 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.09.2005, 11:57 Uhr
~Tobias91
Gast


hallo

@virtual: Vielen Dank für deine Hilfe. Habe es so probiert und ich kann die Tabele so durchsuchen.

Aber jetzt habe ich immer noch das Problem mit dem dazugehörigen Index. Die Funktion bsearch gibt ja den Pointer auf das Element. Also bei einem Erfolg den Pointer auf das gesuchte Element. Somit habe ich ja den gesuchten Wert (z.B. den Wert '113'). Ich benötige ja aber den dazugehörigen Index der Tabelle, damit ich auch die anderen Werte auslesen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


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: