Ошибка при печати элементов вектора
В следующем коде у меня есть 2D вектор, в каждом индексе вектора каждая пара содержит in t и string. Я пытаюсь получить доступ к каждому элементу после получения значений в векторе. Предложения будут очень благодарны.
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,string>> aye[101];
int main()
{ int n,m,i,a,b;
string x;
cin >> n >> m;
for (int i = 1; i <= n; ++i)
{
cin >> x;
cin >> a >> b;
aye[a].push_back(make_pair(-b,x));
cout<<aye[a].first<<aye[a].second;//this is not working
cout<<aye[a][0]<<aye[a][1]<<endl;//this is not working
}
}
2 ответа
Вы, кажется, смущены своей структурой двухмерного массива (я должен признать, я также немного смущен, почему вы используете что-то подобное). Это:
aye[a]
Является ли (a+1) -й элемент массива, который является вектором, то
aye[a][i]
(i+1) -й элемент в этом векторе, который является парой и
aye[a][i].first
aye[a][i].second
первые / вторые записи этой пары, соответственно.
Однако у меня есть сомнения, что вам действительно нужен массив векторов пар, тем более что вы, похоже, игнорируете одно из измерений в остальной части кода.
Вы, кажется, пытаетесь напечатать элемент, который вы только что добавили в vector
для этого я бы предложил использовать vector::back
, Вы можете заменить две неработающие строки чем-то вроде этого:
cout << aye[a].back().first << ' ' << aye[a].back().second;
Независимо от вашего намерения с этой структурой, введенные значения a
представляют угрозу для вашего дизайна:
- Там нет проверки, чтобы увидеть, что твое падение между 0 и 100
- Вы выделяете 101 элемент, даже не зная,
n
Который означает, что101 - n
из этих элементов впустую.
В этой ситуации я считаю, используя map
для вашего первого измерения был бы гораздо лучший план; так что ваша структура будет выглядеть так:
map<int, vector<pair<int, string>>> aye;
Никаких дополнительных изменений в вашем коде не потребуется, но вы должны выделить только n
vector<pair<int, string>>
с ли n
был больше или меньше 101.