Использование вектора push_back с парой

0
задан Remy Lebeau 5 March 2019 в 17:13
поделиться

2 ответа

Это массив векторов в стиле C, здесь действительно нет ничего волшебного.

int spanningTree(vector <pair<int,int> > g[], int n);

Возможно, вы видели что-то подобное раньше:

int foo( int array[], int n);

В своем коде элементы массива не int, а std::vector с. Почему они смешивают простые массивы и std::vector я не могу вам сказать.

В вашем примере вам нужно сначала использовать operator[] для доступа к элементу, прежде чем вы сможете получить доступ к его .first и .second, или использовать front для получения первого элемента:

for(int x = 0; x < 2; ++x){
    cout << vec[x].front().first << ", " << vec[x].front().second << endl;
}
0
ответ дан Toby Speight 5 March 2019 в 17:13
поделиться

Я никогда не видел передачи вектора, подобного массиву: vector <pair<int,int> > g[]

Это - массив! Массив векторов.

Проблема с вашим кодом в том, что у вас есть два вектора, оба с одним элементом, и ваш цикл только вытягивает векторы ... а не их единственный элемент.

Ваша версия будет:

#include <iostream>
#include <vector>
#include <utility>
#include <string>

using namespace std;

int main()
{
    vector< pair<string, int> > vec[2];
    vec[0].push_back({"One", 1});

    vec[1].push_back({"Two", 2});

    for(int x = 0; x < 2; ++x){
        cout << vec[x][0].first << ", " << vec[x][0].second << endl;
    }

    return 0;
}

Все, что я добавил, было [0] (индекс для каждого вектора).

1111 Конечно, такой пример имеет сомнительную практичность. В такой ситуации может показаться, что вы хотите один вектор с двумя элементами и без видимых массивов.

Если честно, я не в восторге от оригинального кода. Смешивание массивов и векторов - рецепт путаницы ( Гиелло ); они могли бы использовать «2D-векторы» или, что лучше, 1D-вектор с 2D-индексами, наложенными поверх него. Тогда это будет иметь гораздо лучшую локальность кэша.

0
ответ дан Lightness Races in Orbit 5 March 2019 в 17:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: