C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Datenstruktur für Tabellen mit Index?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Andreas Volz
Guest





PostPosted: Sun Oct 30, 2005 12:29 pm    Post subject: Datenstruktur für Tabellen mit Index? Reply with quote



Hi,

ich habe ein Datenstruktur die praktisch in Tabellenform vorliegt. Ich
muss darauf auch über mehrere Spalten zugreifen. Wenn ich eine Struktur
aus maps und vectoren aufbauen, dann endet das in einer Zugriffrichtung
immer in sehr vielen Schleifendurchläufen bis der Wert gefunden ist.
Ich habe im Durchschnitt für jede Zugriffsspalte etwa gleich viele
Zugriffe.

Eigentlich bräuchte ich so eine Datenorganisation wie ich auf eine
SQL-Datenbank zugreife, nur eben im Speicher. Eine Datenbank scheint
mir aufgrund der Datengröße übertrieben zu sein. Ich muss ja die Daten
auch nicht auf einer Platte abspeichern. Die Tabelle muss nur zur
Laufzeit aufgebaut und im Speicher gehalten werden.

Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Raymond Haeb
Guest





PostPosted: Sun Oct 30, 2005 12:42 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote



Es begab sich, daß Andreas Volz der Welt verkündete:
Quote:
Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Wie wäre es mit boost multiindex?
http://www.boost.org/libs/multi_index/doc/index.html

Raymond

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
M G Berberich
Guest





PostPosted: Sun Oct 30, 2005 12:52 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote



On Sun, 30 Oct 2005, Andreas Volz <usenet-spam-trap (AT) brachttal (DOT) net> wrote:

Quote:
ich habe ein Datenstruktur die praktisch in Tabellenform vorliegt. Ich
muss darauf auch über mehrere Spalten zugreifen. Wenn ich eine Struktur
aus maps und vectoren aufbauen, dann endet das in einer Zugriffrichtung
immer in sehr vielen Schleifendurchläufen bis der Wert gefunden ist.
Ich habe im Durchschnitt für jede Zugriffsspalte etwa gleich viele
Zugriffe.

Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Wie Du schon ganz richtig festgestellt hast: map (und multimap). Bau
Dir eine map mit Zeigern auf die Daten, das nennt man bei DBs dann
Index. Das machst Du für jeden Zugriff den Du indiziert haben willst.

MfG
bmg


--
"Des is völlig wurscht, was heut beschlos- | M G Berberich
sen wird: I bin sowieso dagegn!" | [email]berberic (AT) fmi (DOT) uni-passau.de[/email]
(SPD-Stadtrat Kurt Schindler; Regensburg) | www.fmi.uni-passau.de/~berberic

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Florian Weimer
Guest





PostPosted: Sun Oct 30, 2005 2:20 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote

* Andreas Volz:

Quote:
Eigentlich bräuchte ich so eine Datenorganisation wie ich auf eine
SQL-Datenbank zugreife, nur eben im Speicher. Eine Datenbank scheint
mir aufgrund der Datengröße übertrieben zu sein.

Der Einsatz von SQLite bietet sich trotzdem an.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Sun Oct 30, 2005 2:51 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote

Am Sun, 30 Oct 2005 13:52:12 +0100 schrieb M G Berberich:

Quote:
On Sun, 30 Oct 2005, Andreas Volz <usenet-spam-trap (AT) brachttal (DOT) net
wrote:

ich habe ein Datenstruktur die praktisch in Tabellenform vorliegt.
Ich muss darauf auch über mehrere Spalten zugreifen. Wenn ich eine
Struktur aus maps und vectoren aufbauen, dann endet das in einer
Zugriffrichtung immer in sehr vielen Schleifendurchläufen bis der
Wert gefunden ist. Ich habe im Durchschnitt für jede Zugriffsspalte
etwa gleich viele Zugriffe.

Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Wie Du schon ganz richtig festgestellt hast: map (und multimap). Bau
Dir eine map mit Zeigern auf die Daten, das nennt man bei DBs dann
Index. Das machst Du für jeden Zugriff den Du indiziert haben willst.

Ja, mit maps (multimaps) hab ich auch vermutet. Aber ich bin noch nicht
ganz sicher wie genau. Ich zeige mal meine Datenstruktur:

Target | Mass | Negative | Positive | Zero
----------------------------------------------
string | string | float | float | float
....

Jetzt ist eine Target/Maß Kombination zusammen ein eindeutiger
Schlüssel. Somit können also Werte in Target oder Mass einzeln
betrachtet mehrmals vorkommen.

Ich will in SQL-Schreibweise also hauptsächlich folgende Aufrufe
durchführen:

SELECT Mass, Negative, Positive, Zero from tabelle WHERE Target='xxx'
oder
SELECT Target, Negative, Positive, Zero from tabelle WHERE Mass='xxx'
oder
SELECT Negative,Positive,Zero from tabelle WHERE Mass='xxx'
AND Target='yyy'

Nur damit ohne viel Worte klar wird was ich erreichen will.

Ich stelle mir das momentan so vor:

struct Data
{
string target;
string mass;
float negative;
float positive;
float zero;
};

multimap multimap <string, Data*> mass_map; // string=mass

Damit müsste es funktionieren. Dann noch eine Klasse daherum gebaut um
sicherzustellen, dass die "Datenbank" konsistent bleibt (z.B.
eindeutige Schlüssel). Momentan ist nur einmaliges Einfügen und
ständiges Auslesen vorgesehen. Aber falls sich das mal ändert würde es
mit dem Anlegen der Schlüssel etwas komplizierter. Kann man das so
machen? Oder wäre ein anderes Vorgehen besser?

Zusatzfrage:
Kennt jemand eine fertige C++ Klasse oder Bibliothek die eine
relationale Datenbank als Datenstruktur realisiert? (Mit SQL-Abfrage?)
Aber ohne Festplattenzugriff (z.B. MySQL oder so). Nur für Operationen
im Speicher.

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Sun Oct 30, 2005 3:17 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote

Am 30 Oct 2005 14:42:47 +0200 schrieb Raymond Haeb:

Quote:
Es begab sich, daß Andreas Volz der Welt verkündete:
Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Wie wäre es mit boost multiindex?
http://www.boost.org/libs/multi_index/doc/index.html

Das sieht sehr gut aus! Ich teste gerade mal die Beispiele aus ob ich
es damit hinbekomme. Ich hab boost installiert, aber kann ich dann
später beim weitergeben meines Programms auch nur die eine Klasse aus
Boost rauskopieren? Mir erscheint Boost ansonsten als zu große
Abhängigkeit.

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Sun Oct 30, 2005 3:36 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote

Am Sun, 30 Oct 2005 15:20:56 +0100 schrieb Florian Weimer:

Quote:
* Andreas Volz:

Eigentlich bräuchte ich so eine Datenorganisation wie ich auf eine
SQL-Datenbank zugreife, nur eben im Speicher. Eine Datenbank scheint
mir aufgrund der Datengröße übertrieben zu sein.

Der Einsatz von SQLite bietet sich trotzdem an.

Ja, das kenne ich auch vom hören. Ich bin auch am überlegen ob ich das
nutze. Der Vorteil ist halt die einfache Benutzung und das ich SQL im
Gegensatz zu dem Boost-Template schon kann. Ich versuch es mal mit
Boost und wenn das nicht auf Anhieb will, ist SQLite mein nächster
Versuch.

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Andreas Volz
Guest





PostPosted: Mon Oct 31, 2005 1:53 pm    Post subject: Re: Datenstruktur für Tabellen mit Index? Reply with quote

Am 30 Oct 2005 14:42:47 +0200 schrieb Raymond Haeb:

Quote:
Es begab sich, daß Andreas Volz der Welt verkündete:
Welche Ansätze gibt es um Tabellen mit Indexzugriff auf mehreren
Spalten in C++ zu organisieren?

Wie wäre es mit boost multiindex?
http://www.boost.org/libs/multi_index/doc/index.html

Boost multi_index scheint zu passen. Mein Beispielprogramm funktioniert
schon fast wie ich es gern hätte. Allerdings noch nicht ganz, es geht
immer nur nach einem Index suchen. Und zwar nach dem ersten den ich
einfüge:

typedef multi_index_container<
learnedMeasure,
indexed_by<

ordered_unique<
composite_key<
learnedMeasure,
member member<learnedMeasure,std::string,&learnedMeasure::measure_name>
Quote:



learnedMeasureSet;
....


// look for all blub2.target
std::pair<learnedMeasureSet::iterator,learnedMeasureSet::iterator> p=
es.equal_range(boost::make_tuple (std::string("blub2.target")));

cout << "search:" << endl << endl;

while(p.first!=p.second){
std::cout< < ++p.first;
}

Wenn ich allerdings nach einem Feld aus measure_name suche, dann wird
nichts gefunden. Wenn ich die Reihenfolge beim Anlegen der Index in
learnedMeasureSet vertausche, dann wird es gefunden. Der Befehl sucht
also immer nach dem ersten Index.

Dazu auch das Zitat aus der Boost Doku:

"...partial searches without specifying the first keys are not allowed."

Ich hab schon die Boost List aboniert, aber warte schon seit Gestern
darauf das meine E-Mail durch kommt. Daher hoffe ich das mir jemand
hier helfen kann.

Gibt es wirklich keine Möglichkeit nach den Indexen unabhängig zu
suchen? Für meine Anwendung ist es wichtig in dem Datenbestand nach
zwei Indexen unanhängig von einander zu suchen. Sonst müsste ich es
doch mit dem SQL-Hammer oder über doppelt verwaltete Datenbestände
lösen. Wäre schade, ansonsten gefällt mir boost multi_index sehr gut.

Gruß
Andreas

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
 


Powered by phpBB © 2001, 2006 phpBB Group