Я ничего не знаю о OpenMP , поэтому я не знаю, оптимизирует ли он следующее или нет. Но вы можете использовать std::advance
, вот так:
#include <map>
#include <string>
#include <iterator>
#include <iostream>
typedef std::map<std::string, int> Map;
int main() {
Map m;
m["one"] = 1;
m["two"] = 2;
for(int i = 0; i < m.size(); ++i) {
Map::iterator it = m.begin();
std::advance(it, i);
std::string thiskey = it->first;
int thisValue = it->second;
std::cout << thiskey << "\n";
}
}
Но учтите, что std::advance
- это O (n), поэтому ваша (однопоточная) сложность равна O (n ^ 2).
<час />
EDIT : если вы копируете элементы карты в вектор, то понимаете, что вы можете сделать это в одной декларации:
std::vector<Map::value_type> v(m.begin(), m.end());
следующим образом:
#include <map>
#include <string>
#include <iterator>
#include <iostream>
#include <vector>
typedef std::map<std::string, int> Map;
int main() {
Map m;
m["one"] = 1;
m["two"] = 2;
int i = 0;
for( std::vector<Map::value_type> v(m.begin(), m.end());
i < v.size(); ++i) {
std::string thiskey = v[i].first;
int thisValue = v[i].second;
std::cout << thiskey << "\n";
}
}