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.

InformationsquelleAutor danijar | 2013-08-18

Schreibe einen Kommentar