Каков эффективный способ ввода 2d-вектора в С++?

3    //number of lines
1 2  
2 1
4 5

Я хочу сохранить n строк в виде 2d-вектора, как лучше всего это сделать?


person logan    schedule 03.08.2020    source источник
comment
Всегда ли есть два столбца в строке?   -  person cdhowie    schedule 03.08.2020
comment
Да! Учитывая, что количество столбцов фиксировано для n строк ввода. Как и приведенный выше ввод.   -  person logan    schedule 03.08.2020
comment
std::vector<std::pair<int, int>> — это один из вариантов. std::vector<std::array<int, 2>> это другое.   -  person Ted Lyngmo    schedule 03.08.2020
comment
@JeJo Это в основном то, чем уже является std::vector<std::array<...>>.   -  person cdhowie    schedule 03.08.2020
comment
@cdhowie Я не уверен. нет необходимости, чтобы все данные были непрерывными... Какова структура памяти векторных массивов?   -  person JeJo    schedule 03.08.2020
comment
@JeJo Я не уверен, что это очень важно, за исключением того, что меньше фактических данных поместится в кеш. При выполнении индексированного поиска определенной строки и столбца это по-прежнему просто вычисленное смещение с одним уровнем косвенности (так же, как плоский массив). Если заполнение не важно, должно быть возможно время компиляции static_assert, чтобы гарантировать отсутствие заполнения.   -  person cdhowie    schedule 03.08.2020


Ответы (1)


int t;
cin>>t;
std::vector<std::vector<int>> Vec(t, std::vector<int>(2, 0)); // replace zero with some value if you wanna intiallize vector.
for(int i=0; i<t; i++){
    for(int j=0; j<2; j++{
        cin>>Vec[i][j];
    }
}

именно так я всегда инициализирую 2d-вектор и ввожу ввод. Я чувствую, что нет ничего более эффективного.

person Harry    schedule 03.08.2020
comment
Отказ от форматированного ввода std::cin более эффективен, но требует использования функций C, таких как scanf(). - person cdhowie; 03.08.2020
comment
я согласен .. мы можем добиться такой же производительности с точки зрения времени, используя ios_base::sync_with_stdio(0); цин.связь(0); cout.tie (0); Но я считаю, что в целом cin достаточно прост и эффективен, но может быть не так эффективен, как scanf printf. - person Harry; 03.08.2020