У меня есть двумерный вектор данных, который не отсортирован и содержит повторяющиеся элементы.
Как найти минимум и все индексы со значением?
Например, учитывая данные vector<vector<int>> mySol = {{3,1},{1,2},{4,5},{1,3},{1,2}}
, я хочу найти {1,2}
, {1,3}
и {1,2}
, которые дают минимальное значение 1 (на основе первого элемента) и индексы 2, 3 и 2.
Как улучшить следующий фрагмент кода? Для больших данных следующий код кажется медленным из-за sort
:
vector<vector<int>> mySol = {{3,1},{1,2},{4,5},{1,3},{1,2}};
sort(mySol.begin(), mySol.end());
//print out shortest distance
cout << mySol[0][0] << endl;
//print out the number of shortest paths
int nShortest = 0;
for (int i = 0; i < mySol.size(); i++) {
if (mySol[0][0] == mySol[i][0])
nShortest += 1;
}
cout << nShortest << " ";
//print out y-coordinates of the shortest paths in increasing order
for (int i = 0; i < nShortest; i++) {
cout << mySol[i][1] << " ";
}