Как я могу отсортировать 2D вектор на основе значений другого вектора? - PullRequest
0 голосов
/ 12 января 2020

Итак, у меня есть двумерный вектор, содержащий оценки студентов и университета, в котором они будут учиться.

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 мс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...