У меня есть структура данных в формате разреженных сжатых столбцов.
Для моего данного алгоритма мне нужно перебрать все значения в «столбце» данных и сделать кучу вещей. В настоящее время он работает хорошо, используя обычный цикл for. Босс хочет, чтобы я перекодировал это как цикл for_each для будущего распараллеливания.
Для тех, кто не знаком с разреженным сжатым столбцом, он использует 2 (или 3) вектора для представления данных. Один вектор - это просто длинный список значений. Второй вектор - это индекс начала каждого столбца.
Текущая версия
// для обработки данных в столбце 5
векторные значения;
вектор colIndex;
вектор rowIndex;
int column = 5;
for(int i = conIndex[5]; i != colIndex[6]; i++){
value = values[i];
row = rowIndex[i];
// do stuff
}
Ключ в том, что мне нужно знать местоположение (в виде целого числа) в моем столбце значений, чтобы искать положение строки (и кучу других вещей, которые я не потрудился перечислить здесь .)
Если я использую функцию std :: for_each (), я получаю значение в позиции, а не в позиции. Мне нужна сама позиция.
Одна мысль, и явно неэффективная, состоит в том, чтобы создать вектор целых чисел такой же длины, что и мои данные. Таким образом, я мог бы передать итератор по этому фиктивному вектору в функцию в for_each, и значение, переданное моей функции, было бы положением. Однако это кажется наименее эффективным способом.
Есть мысли?
Моя проблема в том, что мне нужно знать позицию в векторе. for_each принимает итератор и отправляет значение этого итератора в функцию.