Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » ------------------mulitmap -----------------------

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 < [ 3 ]
010
27.07.2013, 20:23 Uhr
Hans
Library Walker
(Operator)





Zitat von :
Ehrlich gesagt, bin ich auch total verwirrt und weiß nicht wie ich das weiter machen soll. Und das schlimme ist, dass ich das bis Montag fertig haben muss

Auch das noch! - Ich hoffe, Du hast diesen Hinweis gesehen.

Nun gut, mal sehen, was mein Compiler davon hält...

Melde mich dann gleich noch mal.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
27.07.2013, 20:33 Uhr
YumiFerrari



brauchst du die Tabelle dafür nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
28.07.2013, 00:46 Uhr
Hans
Library Walker
(Operator)


Hi,

okay, ist 'n bischen später geworden...

Also eine Tabelle hab ich mir mal selbst gebastelt... - Ansonsten, da das ja 'ne csv-Datei sein soll, kannst Du die doch mit einem Editor öffnen und dann mittels copy & paste hier rein stellen. Du solltest sie aber in code-Tags einschliessen.

Um Dein konkretes Problem zu erläutern, wäre es sinnvoller gewesen, wenn Du den Code soweit eingestampft hättest, das Dein Problem relativ schnell sichtbar wird. Evtl. ein separates kurzes Beispielprogramm schreiben, das es verdeutlicht. Dann braucht man sich nicht durch den ganzen übrigen Code zu kämpfen.

Was den Rest angeht, so rächt es sich bei mir gerade, das ich mehr Ahnung von C habe als von C++, wo sie sehr begrenzt ist. Ich werde mich morgen noch mal melden, dann hoffentlich mit einem Beispiel, sofern sich nicht inzwischen mal einer der anderen Spezialisten meldet, die mehr Ahnung von C++ haben als ich.

so far for now,
Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
28.07.2013, 10:37 Uhr
YumiFerrari



Hallo Hans,

ehrlich gesagt, weiß ich gar nicht wo das Problem genau liegt.....daher hab ich den ganzen Code rein gestellt.
Ich habe hier ein paar Zeilen aus der CSV Datei kopiert. Ich weiß ehrlich gesagt nicht, wie du das mit Code Tags einschließen. Ich hoffe das ist okay so


Code:
Level; ShortName; rtName        
1; jet
2; WinLC RTX F
3; DB_GET_OPC_QUALITIES; [.....]DB6509,>>>FB 65009<<<0
4; REQ; [......]DB6509,X0.0
4; ERROR; [.....]DB6509,WORD2
4; ODK_OUT    
5; Done; [.....]DB6509,X46.0
5; Busy; [.....]DB6509,X46.1
5; Error; [.....]DB6509,X46.2
3; DB_OPC_DISCONNECT; [.....]DB6508,>>>FB 65008<<<0
4; REQ; [.....]DB6508,X0.0
4; DONE; [.....]DB6508,X2.0
4; BUSY;  [.....]DB6508,X2.1
4; ERROR; [.....]DB6508,X2.2
4; ODK_OUT    
5; Done;  [.....]DB6508,X36.0
5; Busy; [.....]DB6508,X36.1
5; Error; [.....]DB6508,X36.2



Ich hab die Zeilen so ausgesucht, dass die selben Symbolbezeichnungen auftauchen. Ich glaube, dass es jetzt so ist, dass die Map die selben Bezeichnungen überschreibt.

Die Idee ist es, die Symbolnahmen mit GetAddress(Symbolname) aufzurufen. Diese Funktion habe ich nicht im Code, weil ich nicht genau weiß, wie man das machen könnte. Aber da die Symbolnamen sich wiederholen, war die Idee, dass man dann z.B. GetAddress(1.2.3.4) (für die Punkte, kommen die genauen Symbolnamen hin) eingibt, damit man die richtige Bezeichnung hat. Aber das wird mir nicht viel bringen, wenn die Map die Tabelle schon vorher läd und die Smybolnamen schon überschrieben werden...... Verstehst du was ich meine?

----
Edit: code-tags eingefügt.

Dieser Post wurde am 28.07.2013 um 17:31 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
28.07.2013, 14:35 Uhr
YumiFerrari



Ich bins wieder..... ich hätte eine Idee, aber ich weiß ehrlich gesagt nicht, ob das so anwendbar ist bei einer Map.

z.B.

Level Symbol

1 A
2 B
3 C
4 D
4 E
3 D

Also wenn ich das zweite D haben möchte, dann müsste ich als Input eingeben GetAddress(1.2.3) also mit den Symbolen jetzt GetAdress(A.B.D).....
und wenn ich das erste D haben möchte, dann eben GetAddress(1.2.3.4) und in Symbolen ausgeschrieben GetAddress(A.B.C.D)...

Das man am Anfang der Map eine Schleife einbaut mit Bedingungen, die sich dann auf die Levels und auf die Zusammensetzung der Symbolen beziehen würden.

Das müsste überprüft werden, ob die nachfolgende Zahl größer, kleiner oder gleich ist. dementsprechend, würde mann diese an den Namen dran hängen, oder weiter springen zu der nächsten Zeile.....

Ich hoffe ich hab mich verständlich ausgedrückt, dass man das verstehen kann....



Wäre sowas denn möglich bei einer Map?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
28.07.2013, 18:12 Uhr
Hans
Library Walker
(Operator)


Hi,

soweit wie ich das bisher sehe, hast du ein Verständnisproblem mit der map. Ich zitier mal mein Buch dazu:

Zitat:

Die Klasse map<Key, T>, eingebunden durch den Header <map>, speichert Paare von Schlüsseln und zugehörigen Daten. Dabei ist der Schlüssel eindeutig, es kann also keine zwei Datensätze mit dem selben Schlüssel geben. map ist ein assoziativer Container: Die Daten werden durch direkte Angabe des Schlüssels gefunden.


Soweit mal mein Buch. Das Problem bei Dir ist, das Schlüssel bisher mehrfach auftreten. D.h. Du brauchst eine Möglichkeit um eindeutige Schlüssel zu generieren, damit alle Daten gespeichert werden können. Ich halte es für das Beste, wenn du dazu die ganze Zeile verwendest, und zwar bevor Du sie zerlegst. Etwa indem Du eine Prüfsumme berechnest, die du dann als Schlüssel verwendest.

Zum Verständnis der map hier auch noch ein Beispiel aus dem Buch:

C++:
/* cppbuch/k28/sortedmap.cpp
   Beispiel zum Buch von Ulrich Breymann: Der C++ Programmierer; Hanser Verlag
   Diese Software ist freie Software. Website zum Buch: www.cppbuch.de/
*/

#include<map>
#include<string>
#include<iostream>
using namespace std;

// Zwei  typedefs zur Abkürzung
typedef map<string, long>   MapType; // Vergleichsobjekt: less<string>()
typedef MapType::value_type ValuePair;

int main()
{
    MapType aMap;
    aMap.insert(ValuePair("Thomas", 5192835));
    aMap.insert(ValuePair("Werner", 24439404));
    aMap.insert(ValuePair("Manfred", 535353));
    aMap.insert(ValuePair("Heiko",   635352723));
    aMap.insert(ValuePair("Andreas", 42536347));
    aMap.insert(ValuePair("Karin",   9273539));
    // 2. Einfügen von Heiko mit einer anderen (Tel.Nummer wird
    // NICHT ausgeführt, weil der Schlüssel schon existiert.
    aMap.insert(ValuePair("Heiko",   1000000));

    /* Wegen der auf einer Baumstruktur basierenden Implementierung
      ist die Ausgabe nach Namen sortiert.
    */

    cout << "Ausgabe:\n";
    auto iter = aMap.begin();  // Hier meckert g++; k.A. warum
    while(iter != aMap.end())
        {
            cout << (*iter).first  << ':'     // Name
                 << (*iter).second << endl;   // Nummer
            ++iter;
        }

    cout << "Ausgabe der Nummer nach Eingabe des Namens\n"
         << "Name: ";
    string derName;
    cin >> derName;
    cout << "Suche mit Iterator: ";
    iter = aMap.find(derName);         // O(log N)
    if(iter != aMap.end())
        {
            cout << (*iter).second  << endl;
        }
    else
        {
            cout << "Nicht gefunden!" << endl;
        }

    /*
    cout << "Suche mit operator[]() (Element muss existieren,\n"
        "andernfalls wird eine undef. Nummer (0) für den Namen angelegt): ";
     cout << aMap[derName]  << endl;        // O(log N)
    */

    // im neuen Standardentwurf C++0x:
    try
        {
            cout << "Suche mit at(): " << aMap.at(derName)  << endl;  // O(log N)
        }
    catch(const exception& e)
        {
            cout << "Nicht gefunden! Exception: " << e.what() << endl;
        }
}


Soweit mal das. Das Programm ist im Buch auf Seite 786 abgedruckt, und steht (derzeit, also 2013) auch im Downloadbereich der Webseite zum Buch zur Verfügung (tar-archiv).


Hier die genauen Daten zum Buch: U.Breymann, Der C++ Programmierer, 2. Auflage, Hanser 2011, ISBN: 978-3-446-42691-7
Der zitierte Text steht auf Seite 782.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
28.07.2013, 18:43 Uhr
YumiFerrari



Hallo Hans,

danke, aber das Beispiel kenne ich schon.

Also ich hab das schon verstanden, dass jeder Schlüssel eine bestimmte Adresse hat. Und bei mir kommen die öfters vor. Daher war ja auch die Idee die mit den Levels in Verbindung zu bringen, damit die eindeutiger werden.....

Wie du das vorgeschlagen hast.... auch wenn ich die ganze Adresse einlese ohne die vorher zu zerlegen, bringt mir das ja nicht viel, weil mein Schlüssel ja öfters vorkommt.

Dieser Post wurde am 28.07.2013 um 18:46 Uhr von YumiFerrari editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
28.07.2013, 20:33 Uhr
Hans
Library Walker
(Operator)


Hi,

hab jetzt noch mal weiter gelesen. Demnach wäre vielleicht doch die multimap die Lösung für Dein Problem. Dann müsstest Du aber die Ausgabe anders gestalten, weil du ja für jeden Schlüssel mehr als ein Ergebnis bekommen kannst. Wie man das jetzt am besten umsetzt, weis ich aber auch nicht, denn wie oben schon geschrieben, hab ich mehr Ahnung von C als von C++ und bin mit der STL auch nicht wirklich vertraut.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
28.07.2013, 22:48 Uhr
YumiFerrari



Hey,

hmmmm.... jaaa okay Wie du schon sagst, bekomme ich dann alle möglichen Treffer zu dem Schlüsselwort dann raus. Wobei ich ja nur ein bestimmtes haben möchte.....

ich hab mir jetzt was überlegt, wenn man die Map Funktion so lässt....ich hab in der Map Funktion eine Schleife. Ich wollte da noch eine Schleife mit einbauen, die dann eben die Levels überprüft...

i Level der aktuellen Zeile
j Level der nachfolgenden Zeile

j > i -> bei diesem Fall wird der Name von j an den von i drangehängt und in die Map geladen
j < i -> be diesem Fall sollen die kleinere Zahl in den gelesenen Zeilen gesucht werden und dann wird überprüft, ob die 1. Bedingung erfüllt wird. Dann alles wie bei der 1. Bedingung
j = i -> hier wird genau das gemacht wie bei Bedingung 2.

So wird der Dateipfad als Symbolname in die Map geladen. Dann kann ich es wie ich das jetzt auch mache den Namen eingeben und bekomme es dann Die Adresse als Ausgabe....


Ich hab keine Ahnung ob das klappt, aber ich muss das jetzt mal umsetzen, wo ich noch bisschen dran hängeee..........
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
29.07.2013, 22:49 Uhr
~f.-th.
Gast


@ hans
hast du bei deinem g++ den C++11-switch bei deinem Quelltext gesetzt?

http://stackoverflow.com/questions/1046477/is-there-any-reason-to-use-the-auto-keyword-in-c-c

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: