Warum nicht std::map-operator[] ein Objekt erstellen, wenn der Schlüssel nicht vorhanden?

Ich bin mir ziemlich sicher, sah ich diese Frage irgendwo (comp.lang.c++? Google nicht scheinen, um es zu finden gibt), aber eine kurze Suche hier nicht scheinen, es zu finden, also hier ist es:

Warum hat die std::map-operator[] ein Objekt erstellen, wenn der Schlüssel nicht vorhanden? Ich weiß nicht, aber für mich scheint counter-intuitive, wenn man im Vergleich zu den meisten anderen operator[] (wie std::vector), wo, wenn Sie es verwenden, müssen Sie sicher sein, dass der index existiert. Ich Frage mich, was die Beweggründe für die Durchführung dieses Verhalten von std::map. Wie ich schon sagte, wäre es nicht mehr intuitiv zu handeln wie ein index in einem Vektor-und crash (auch zu undefiniertem Verhalten denke ich), wenn der Zugriff mit einem ungültigen key?

Raffination meine Frage nachdem ich die Antworten:

Ok so weit ich habe eine Menge von Antworten sagen im Grunde ist es Billig, also warum nicht oder ähnliche Dinge. Ich Stimme völlig mit, aber warum nicht über eine spezielle Funktion für, die (ich glaube, der Kommentar sagte, dass in java gibt es keinen operator[] und die Funktion aufgerufen wird gestellt)? Mein Punkt ist, warum nicht map-operator[] funktioniert wie ein Vektor? Wenn ich mit operator[] auf eine out-of-range index eines Vektors ich es nicht möchte, um ein element einzufügen auch wenn es Billig warweil das wahrscheinlich bedeuten, einen Fehler in meinem code. Mein Punkt ist, warum es ist nicht das gleiche wie mit der Karte. Ich meine, für mich, über operator[] auf einer Karte, würde das bedeuten: ich weiß, dieser Schlüssel ist bereits vorhanden (aus welchem Grund auch immer, habe ich nur eingefügt, ich habe Redundanz irgendwo, was auch immer). Ich denke, es wäre intuitiver, Weg.

Das heißt, was sind die Vorteil des aktuellen Verhaltens mit operator[] (und nur für diese, ich Stimme zu, dass eine Funktion mit dem aktuellen Verhalten sollte es sein, nur nicht operator[])? Vielleicht gib es übersichtlicher code, der Weise? Ich weiß es nicht.

Andere Antwort war, dass es bereits so, also warum nicht halten Sie es aber dann, wahrscheinlich, wenn Sie (die, die vor AWL) wählen, um es zu implementieren, die Art, wie Sie fand es einen Vorteil, oder was? Also meine Frage ist im Prinzip: warum Sie wählen, um es zu implementieren, die Art und Weise, was bedeutet, eine etwas mangelnde Kohärenz mit anderen operator[]. Was für ein Vorteil es tun zu geben?

Dank

InformationsquelleAutor der Frage n1ckp | 2009-10-28

Schreibe einen Kommentar