2016-05-10 3 views
-2

в следующем коде, у меня есть 2D-вектор, в каждом индексе вектора каждая пара содержит int и строку. Я пытаюсь получить доступ к каждому элементу после принятия значений в векторе. Предложения будут очень оценены.Ошибка при печати элементов вектора

#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 

} 
} 
+1

вам техника его подводит задайте аналогичный вопрос несколько минут назад? Что такое сообщение об ошибке? – user463035818

+0

Кстати, по-прежнему выглядит странно, что вы используете массив из 100001 векторов, и все же вы должны сначала исправить наиболее очевидные ошибки. Вы не объявляете переменные. Первые ошибки, которые вы получите, касаются 'n' и' m' undeclared. Не можете ли вы это исправить? – user463035818

+0

@ tobi303 никто не давал ответа, поэтому я снова отправил сообщение .. извините за нарушение. Я хочу напечатать элемент, хранящийся в векторе –

ответ

1

Вы, кажется, смущен вашей 2d структуры массива (я должен признать, я тоже немного запутался, почему вы используете что-то подобное). Это:

aye[a] 

ли (а + 1) -го элемента массива, который представляет собой вектор, то

aye[a][i] 

является (I + 1) -го элемента в этом векторе, который является a пара и

aye[a][i].first 
aye[a][i].second 

- первые и две позиции этой пары, соответственно.

Однако у меня есть сомнения, что вам действительно нужен массив векторов пар, особенно, поскольку вы, кажется, игнорируете один из размеров в остальной части кода.

0

Вы, кажется, пытаетесь напечатать элемент, который вы только что добавили в vector, чтобы сделать это, я бы предложил использовать vector::back. Вы могли бы заменить два не рабочие линии с чем-то вроде этого:

cout << aye[a].back().first << ' ' << aye[a].back().second; 

Live Example


Независимо от намерения этой структуры, введенные значения a представляет угрозу для вашего дизайна:

  1. Нет чека, чтобы увидеть, что ваше падение между 0 и 100
  2. Вы назначаете 101 элемент прежде чем даже зная n, что означает, что 101 - n этих элементов впустую.

В этой ситуации я считаю, что использование map для вашего первого измерения было бы гораздо лучшим планом; так что вы структура будет выглядеть следующим образом:

map<int, vector<pair<int, string>>> aye; 

Никаких дополнительных изменений не потребуется внести в код, но вы бы выделить только nvector<pair<int, string>> s ли n был больше или меньше 101.

Смежные вопросы