У меня есть сетка с огромным количеством сегментов, я хочу применить фильтр и заполнить std::set set_
, который является частным членом класса A
. Существует функция называется fill_vec()
, который собирается заполнить вектор с использованием for
цикла:OpenMP через std :: set using iterator
fill_set()
{
for(mesh::SegIterator it = A.beginSeg(); it != A.endSeg(); ++it)
{
mesh::Segment Seg_ = *it;
int SignP = 0;
int SignN = 0;
for(mesh::PointIterator itp = Seg_.beginPoint(); itp != Seg_.endPoint(); ++itp)
{
double old_, new_;
...
...
if(old_ > 0.0 && new_ > 0.0)
SignP++;
if(old_ < 0.0 && new_ < 0.0)
SignN++;
}
if((SignP == 1 && SignN == 1) || (SignP == 1 && SignN == 2))
{
set_.insert(Seg_);
}
}
Я пытаюсь peform выше кода параллельно с использованием OpenMP и C++ 03. Я видел некоторые решения, такие как this. Любое другое безопасное и аккуратное решение?
Является ли сетка :: SegIterator RandomAccessIterator или просто двунаправленнымИстер (или даже просто ForwardIterator)? – SirGuy
Я не понимаю, почему вы не можете использовать те же методы [я описал для std :: vector] (https://stackoverflow.com/questions/18669296/c-openmp-parallel-for-loop-alternatives-to -stdvector/18671256 # 18671256). Записывайте частные наборы для каждого потока и объединяйте их с 'insert' в критическом разделе. –