Kann ich auf die Elemente in einer c++ - std::map und einem integer-index?

Ich habe eine Karte von Elementen, die ich möchte zu Durchlaufen. Natürlich, der standard-Weg, dies zu tun wäre mit einer for-Schleife mit

for (map<string, int> iterator it = myMap.begin(); it != myMap.end(); ++it) {
    string thisKey = it->first;
    int thisValue = it->second;
}

aber wenn ich versuchen und machen diese Schleife laufen parallel mit OpenMP ist parallel für konstruieren, es funktioniert nicht, und das ist (scheinbar) ein bekanntes Problem, da Sie nicht erkennen, diese Art von loop-Konstrukt.

So, mein backup-plan war mit einem integer-index-iterator und den Zugriff auf die Liste der Schlüssel und Werte, die durch den index, als ich tun würde in C# etwa so:

for (int i = 0; i < myMap.Count; ++i) {
    string thisKey = myMap.Keys[i];
    string thisValue = myMap.Values[i];
}

... aber ich kann nicht scheinen zu finden, eine entsprechende Methode in C++. Gibt es eine Möglichkeit in C++, dass ich bewusst bin?

  • Sind Sie sicher, dass std::map ist der beste Behälter für das erreichen wollen?
  • Das Durchlaufen einer Karte ist ein Baum traversal, es ist nicht eine einfache Bedienung. Auch wenn Sie in der Lage waren, zu indizieren, wie Sie wollen, es würde nicht parallelisieren für Sie.
  • wie viele Paare sind in dieser Karte von Euch?
  • Mark: Danke, dass so ziemlich beantwortet meine Frage. Ich denke, dass meine aktuelle Lösung (iterieren über den Baum und kopieren Sie die Ergebnisse in Vektoren, dann Durchlaufen Sie die Vektoren) ist wahrscheinlich der beste Weg zu gehen. JK: für diese spezielle Anwendung, 99991.
InformationsquelleAutor Charles | 2011-08-02
Schreibe einen Kommentar