Ist for(auto i : unordered_map) garantiert die gleiche Reihenfolge jedes mal?
Wenn ich das Durchlaufen einer std::unordered_map
mit dem range-basierte for-Schleife zweimal, wird die Bestellung garantiert gleich?
std::unordered_map<std::string, std::string> map;
std::string query = "INSERT INTO table (";
bool first = true;
for(auto i : map)
{
if(first) first = false;
else query += ", ";
query += i.first;
}
query += ") ";
query += "VALUES (";
first = true;
for(auto i : map)
{
if(first) first = false;
else query += ", ";
query += i.second;
}
query += ");"
In dem obigen Beispiel, wird die resultierende Zeichenfolge sollte in dieser form. Daher ist es wichtig, dass beide Male, die Reihenfolge der iteration ist die gleiche.
INSERT INTO table (key1, key2, key3) VALUES (value1, value2, value3);
Ist das garantiert in C++?
Bitte sagen Sie mir, dass Sie schützen vor SQL-injection-irgendwo.
Ich weiß nicht im moment. Aber es ist etwa speichert die von einem computer-Spiel. Ich code das Spiel und es gibt keine Möglichkeit zu injizieren SQL von außerhalb der Anwendungs-code.
Ich zucke nur jedes mal, dass ich finden Sie unter erstellen von SQL-Zeichenfolgen durch rohe string-Verkettung.
Das ist völlig verständlich, in einem Kontext, wo die Anforderungen über Netzwerke kann die Ursache für Datenbank-Zugriffe.
Es ist nicht immer Daten aus einer nicht vertrauenswürdigen Quelle. Ich habe Anwendungen, die Abstürzen, basierend auf Dingen wie Einstellung den Namen des Spielers zu Sachen, die nicht SQL sicher.
Ich weiß nicht im moment. Aber es ist etwa speichert die von einem computer-Spiel. Ich code das Spiel und es gibt keine Möglichkeit zu injizieren SQL von außerhalb der Anwendungs-code.
Ich zucke nur jedes mal, dass ich finden Sie unter erstellen von SQL-Zeichenfolgen durch rohe string-Verkettung.
Das ist völlig verständlich, in einem Kontext, wo die Anforderungen über Netzwerke kann die Ursache für Datenbank-Zugriffe.
Es ist nicht immer Daten aus einer nicht vertrauenswürdigen Quelle. Ich habe Anwendungen, die Abstürzen, basierend auf Dingen wie Einstellung den Namen des Spielers zu Sachen, die nicht SQL sicher.
InformationsquelleAutor danijar | 2013-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die iteration, um der ungeordneten assoziativen Container kann sich nur ändern, wenn die Aufbereitung als Folge einer mutierenden Betrieb (wie beschrieben in C++11 23.2.5/8). Sie sind nicht geändert wird, die container zwischen den Iterationen, so ist die Reihenfolge nicht ändern.
Obwohl die Spezifikation nicht explizit darauf hingewiesen, dass Aufwärmen nicht auftreten kann, zu jeder anderen Zeit, dies würde ungültig alle Iteratoren auf den container, so dass jede iteration überhaupt unmöglich.
InformationsquelleAutor Mike Seymour
Warum nicht bauen Sie zusammen?
Sieht auch schöner zu werden imo.
Bitte beachten Sie, wenn in diesem Abschnitt wird die performance kritisch ist, könnten Sie die Optimierung der string-building-Prozess mit std::stringstream wie gezeigt hier, obwohl es nicht klar, wie viel das helfen würde
ostringstream
statt, aber dies ist die bessere Vorgehensweise.ja wohl ist dies eine performance-intensive Abschnitt. Sonst könnte dies besser, rein auf die Lesbarkeit Gründe, so oder so war ich vor allem mit Schwerpunkt auf das lösen seines Problems.
Super!!! Ich könnte sogar schneiden, weil der erste Schlüssel und Wert gegeben ist.
std::string keys = "id", values = to_string(Id); for(auto i : serialized) keys += ", " + i.first, values += ", " + i.second;
.oh cool, bin froh, dass ich helfen konnte
InformationsquelleAutor Karthik T