Zwischen den Zeilen einer Map...



  • Hallo,

    ich komme mit meiner recherche zu maps in c++ nicht weiter:

    in einer map sind die startpositionen von feldern eines strings und deren länge gespeichert.

    aufgabe:
    steht der cursor innerhalb eines feldes, benötige ich die anfangsposition des entsprechenden feldes.

    no-go:
    die generierung jeder möglichen position im string mit verweis auf die entsprechende anfangsposition des feldes ist ausgeschlossen.

    frage:
    steht der map-cursor nach find zwischen den nächst-passenden keys?
    gibt es dann eine möglichkeit bei den kleineren key zu lesen?

    meine aktuelle lösung rechnet den key in einer find-schleife bis zum treffer runter... gefällt mir aber nicht so gut.

    danke für eure kommentare.

    uli



  • underduc schrieb:

    startpositionen von feldern eines strings

    was?

    steht der cursor innerhalb eines feldes

    was?

    der map-cursor nach find zwischen den nächst-passenden keys?

    was??

    was meinst du mit startpositionen? was meinst du mit cursor? eine map hat keinen cursor.



  • Hallo Uli,

    Willkommen im C++-Forum.

    Deine Fragestellung ist leider nicht eindeutig.
    Ich unterstelle mal, dass eine (Cursor-)Position in einem der Felder eindeutig über alle Felder ist. Weiter unterstelle ich, dass die Startposition selbst der Key oder Teil des Keys der Maps ist.
    Dann hilft Dir sicherlich die Methode map::upper_bound weiter.
    In Deinem Fall müsstest Du den von dort erhaltenen Iterator einmal dekrementieren (operator--) und Du erhältst den Verweis auf das gewünschte Feld. Vorher natürlich auf map.begin() abfragen, das wäre ein interner Fehler in Deinem Programm, wenn dieser Fall eintritt.

    Gruß
    Werner



  • Hallo Werner,

    danke für die Richtigstellung und den Lösungsvorschlag.
    Leider hat sich gerade meine Festplatte verabschiedet, aber bei nächster Gelegenheit werde ich ihn anwenden.

    Die mißverständliche Darstellung ergibt sich wohl aus der Nähe zum Objekt.

    Ich gelobe Besserung.

    Vielen Dank

    Uli


Anmelden zum Antworten