Мне нужно заполнить std::unordered_map<int,T>
около 100 записей. Это дорого строить, и я хотел бы использовать OpenMP, чтобы сделать это одновременно:Как я могу заполнить std :: unorderd_map одновременно?
unordered_map<int, T> mapWithTs;
#pragma omp parallel for schedule(dynamic) // dynamic because T constructs in some unpredictable time.
for(int i=0; i<100; ++i)
{
mapWithTs.emplace(i, {i}) // calls the constructor T(i)
}
Я прочитал, что карта будет перефразировать, а затем итераторы больше не будет действительным. Что я должен сделать, чтобы сделать эту работу?
Кроме того, как выглядит решение параллелизма со стандартной библиотекой?
Дорогие конструкции, но они дешевы для перемещения? Может ли каждый поток создавать свой собственный вектор, а затем один поток перемещает эти векторные объекты в карту? – Galik
Вы создали бы несколько потоков, каждый из которых заполняет собственную карту, а затем объединяет карты (в одном потоке). –
Вам просто нужно синхронизировать (взаимное исключение) доступ к карте. Я не знаю, как сделать эту синхронизацию с OpenMP, но, предположительно, вы это делаете. Если нет, просто обратитесь к документации. –