Announcement

Collapse
No announcement yet.

std::map

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • std::map

    Hallo Tippergemeinde,

    ich habe erstens eine Verständnisfrage zu ner map und anschließend auch ein prob mit einer.


    1. Verständnisfrage:
    Ich fülle eine map mit ganz vielen Werten, was in etwa so aussehen kann....

    Code:
    std::map<std::string, std::string> tmp;
    tmp["key1"] = "value1";
    tmp["key2"] = "value2";
    tmp["key3"] = "value3";
    tmp["key4"] = "value4";
    .....dann schiebe ich diese in eine Funktion....

    Code:
    void tolleFunktion (tmp)
    ...in der Funktion lese ich die map aus.....

    Code:
    for (std::map<std::string, std::string>::iterator mpit =tmp.begin(); mpit<tmp.end();mpit++)
    {
       std::cout << mpit->first.c_str() << mpit->second.c_str() << std::endl;
    }
    Die Frage ist nun an der Stelle: Warum zum Geier gibt er mir den Inhalt der map total durcheinander aus und nicht in der Reihenfolge wie ich ihn eingelesen habe?

    z.B.
    Code:
    key2 value2
    key1 value1
    key4 value4
    key3 value3
    2. Problem
    Ich hab ne map, welche ich wie oben beschrieben mit einem iterator von beg bis end durchlaufe. Ich frage jedesmal nur den "value" ab also....

    Code:
     std::string testeMich =  mpit->second;
    ...nun habe ich das Problem, dass bei einem der "key" genommen/zurückgeliefert wird, da "value" leer ist???!!

    Warum?

    Viele Grüße und danke,
    MaX

  • #2
    Die Frage ist nun an der Stelle: Warum zum Geier gibt er mir den Inhalt der map total durcheinander aus und nicht in der Reihenfolge wie ich ihn eingelesen habe?
    Weil die Reihenfolge bei einer Map unwichtig ist, und du lt. Spezifikation nicht auf eine bestimmte Reihenfolge setzen kannst.

    Wenn du den Inhalt sortiert haben wilst, musst du eine ensprechende Funktion mitangeben

    http://www.sgi.com/tech/stl/Map.html

    Frage 2 verstehe ich nicht
    Zuletzt editiert von Christian Marquardt; 24.02.2010, 18:31.
    Christian

    Comment


    • #3
      Hab ich mir fast gedacht....

      Also ich befülle eine Map mit einigen key - value - paaren.
      Anschließend gebe ich die Map an eine Methode weiter.
      In dieser Methode werden alle values aus der map gelesen.

      Erster Wert: (debugger)
      { 4294967295, { "\x14†\x02teller\0\0˜ö\x18\0", "Wird nicht unterstützt." }, 23, 31 }

      --> Value = belegt
      --> wird in einen anderen String geschoben bsp:

      Code:
      std::string tester = mpit->second;
      ------------------------------

      Zweiter Wert:
      { 4294967295, { "Hersteller\0\0˜ö\x18\0", "" }, 10, 15 }

      --> Value = leer
      --> das Selbe wie oben jedoch bekomm ich Hersteller ?!!


      ich habe keine Ahnung!
      danke MfG MaX

      Comment


      • #4
        hmmm, kann ich nicht nachvollziehen

        Code:
        #include "map"
        #include "string"
        #include "conio.h"
        #include "iostream"
        #pragma hdrstop
        
        #pragma argsused
        void ausgabe(std::map<std::string, std::string> ausgabemap);
        int main(int argc, char* argv[])
        {
        std::map<std::string, std::string> test;
        test["key1"]="value1";
        test["key2"]="";
        test["key3"]="value3";
        ausgabe(test);
        getch();
        return 0;
        }
        void ausgabe(std::map<std::string, std::string> ausgabemap)
        {
        std::map<std::string, std::string>::iterator iter;
        for (iter =ausgabemap.begin(); iter!=ausgabemap.end();iter++)
         {
         std::cout << iter->first.c_str() << iter->second.c_str() << std::endl;
         }
        }
        Christian

        Comment


        • #5
          hmm danke für die Mühe...muss ich mal schauen.

          Comment

          Working...
          X