Итак, у меня есть двумерный вектор, содержащий оценки студентов и университета, в котором они будут учиться.
vector <vector<int> > results {{170,65,78,93,80,12},{6,3,8,9,1,1}}
Известно, что общих оценок нет, но университеты могут быть одинаковыми. В приведенном выше примере человек с 170 будет go в университете 6, человек с 65 будет go в университете 3 et c. Количество оценок всегда совпадает с количеством университетов. У меня также есть одномерный вектор оценок в том порядке, в котором они должны быть представлены. Например:
vector<int> backup {12,93,80,170,65,78}
Я должен распечатать элементы второго ряда 2D-вектора в соответствии с резервной копией. В этом конкретном примере c выходные данные будут: 1, 9, 1, 6, 3, 8 Это потому, что 12, например, 2D-вектор соответствует 1, а 12 является первым в резервной копии, поэтому 1 будет первый выход. Я попытался сделать это:
vector<int>::iterator it;
ptrdiff_t pos;
for(i=0; i < backup.size(); i++)
{
it = find(results[0].begin(), results[0].end(), backup[i]);
pos = distance(results[0].begin(), it);
fprintf(output, "%d\n",results[1][pos]);
}
, но проблема в том, что время выполнения для большого файла занимает почти полсекунды. Этот проект для конкурса, где время исполнения играет первостепенную роль. У вас есть эффективный способ предложить решение, которое может помочь мне решить мою проблему (менее чем за 90 мс)?
Редактировать: в настоящее время это 400 мс