Ввод представляет собой 2D-матрицу размера n и содержит все значения от 1 до N, то есть каждое значение от 1 до N^2 происходит ровно один раз в матрице. Я пытаюсь сохранить значение индекса ввода (от 1 до n * n), используя векторную пару в местоположении n в векторе.std :: vector :: insert дает неожиданный результат
#include <iostream>
#include<vector>
using namespace std;
int main() {
int n;
cin>>n;
int a[n][n];
vector<pair<int,int> > v(n*n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
v.insert(v.begin()+a[i][j]-1, make_pair(i+1,j+1));
}
}
for(int i=0;i<n*n;i++)
cout<<v[i].first<<" "<<v[i].second<<endl;
return 0;
}
input: 3
1 7 9
2 4 8
3 6 5
output:1 1
2 1
3 1
0 0
3 3
2 2
3 2
0 0
0 0
expected output:1 1
2 1
3 1
2 2
3 3
3 2
1 2
2 3
1 3
Получение неожиданного выхода после первой итерации внутреннего цикла.
Это не C++, это скорее всего gnu-C++ с расширением VLA (http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html). – nwp
Лучшее представление матрицы с 'std :: vector', вероятно,' std :: vector> '. –
Если я понимаю, что вы пытаетесь сделать (что я не могу), вам не придется использовать итераторы. Просто сделайте немного простой математики с i, j и [i] [j]. – Aderis