Ai-je accès à des éléments de c++ std::map par un index entier?

J'ai une carte des éléments que je voudrais parcourir. Bien sûr, le niveau moyen de le faire c'est à l'aide d'une boucle for avec

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

mais si j'essaie de le faire cette boucle exécuter en parallèle en utilisant OpenMP est parallèle pour construire, il ne fonctionne pas, et c'est (apparemment) un problème connu, car il ne reconnaît pas cette sorte de boucle de construire.

Donc, mon plan de sauvegarde a été d'utiliser un index entier itérateur, et accéder à la liste des clés et les valeurs de l'indice, comme je le ferais en C# comme suit:

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

... pourtant, je n'arrive pas à trouver une méthode équivalente en C++. Est-il un moyen de le faire en C++ que je le sache?

Êtes-vous sûr std::map est le meilleur récipient pour ce que souhaite accomplir?
L'itération sur une carte est un arbre transversal, ce n'est pas une opération simple. Même si vous avez été en mesure de l'indice de la manière que vous voulez, il ne serait pas paralléliser pour vous.
combien de couples sont dans cette carte de la vôtre?
Marque: Merci, c'est à peu près répond à ma question. Je pense que ma solution actuelle (parcourir l'arbre et de copier les résultats dans des vecteurs, puis itérer sur les vecteurs) est probablement la meilleure façon d'aller. JK: pour cette application particulière, 99991.

OriginalL'auteur Charles | 2011-08-02