PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] STL Iteratoren Erweitern ohne komplette map zu wrappen?



Joghurt
30-05-2005, 19:04
Hallo.
Ich habe folgendes Problem: Ich habe eine map, die ich als Ringliste darstellen will. Beispiel:

Die map<int,FOO> enthalte:
M[-24], M[-22], M[5], M[40]
Jetzt muss ich auf das nächste bzw. vorherige Element zugreifen können. Soweit kein Problem: (--M.find(-22))->second liefert mir M[-24]. Jetzt soll aber (--M.find(-24))->second M[40] zurückgeben. Ich möchte nach Möglichkeit vermeiden, immer
it = M.find(x);
if (it == M.begin())
it = M.end();
--it; schreiben zu müssen. Gibt es eine Möglichkeit die Iteratoren anzupassen, ohne alles Wrappen zu müssen? So in der Art
// Pseudocode
class NeuMap : public map<int,FOO>
{
public:
iterator& iterator::operator--();
}?

Salnic
21-06-2005, 20:53
Hi Joghurt,

ich war ja sehr erstaunt, dass Du über dreihundert Beiträge geschrieben hast und dabei erst EIN einziges Thema selber erstellt hast. Und dann antwortet Dir noch niemand! Ist schon seltsam.

leider kenne ich mich mit C++ nicht so gut aus und mit verketteten Listen auch nicht. Aber scheinbar benutzt Du eine lineare Liste und "missbrauchst" sie als Ringliste. Warum benutzt Du nicht gleich eine Ringliste?

Warum lässt Du Dein letztes Listenelement nicht auf das erste zeigen (statt auf nil oder wie man das unter C++ macht). Dann musst Du nicht immer gucken, ob es schon das letzte Element ist. Natürlich musst Du jetzt aufpassen, dass der Procedur nicht schwindlich wird und sie immer im Kreis fährt.

Salnic

PS: Vielleicht ist das auch nur ganz dumm von mir, aber das ist mir nicht so wichtig. Soll nur eine Idee von mir sein.

Joghurt
21-06-2005, 22:28
Hi Joghurt,

ich war ja sehr erstaunt, dass Du über dreihundert Beiträge geschrieben hast und dabei erst EIN einziges Thema selber erstellt hast. Und dann antwortet Dir noch niemand! Ist schon seltsam.It's lonely at the top! :rolleyes:


Warum benutzt Du nicht gleich eine Ringliste?Weil es die in der STL meines (bescheidenen) Wissens nach nicht gibt.


Warum lässt Du Dein letztes Listenelement nicht auf das erste zeigen (statt auf nil oder wie man das unter C++ macht). Dann musst Du nicht immer gucken, ob es schon das letzte Element ist. Natürlich musst Du jetzt aufpassen, dass der Procedur nicht schwindlich wird und sie immer im Kreis fährt.Schon, aber wie die Liste implementiert wird, ist Sache der STL, deshalb habe ich da keinen Zugriff drauf.

Die Sache hat sich auch erledigt, hab es inzwischen umständlich gelöst, aber dafür geht es. Dennoch Danke für deine Antwort.