Вложенная структура данных STL - PullRequest
0 голосов
/ 01 октября 2019

На самом деле я сталкиваюсь с проблемой в случае вложенного Stl в c ++, то есть, как пройти через вложенный stl.

#include<iostream>
#include<vector>
#include<list>
#include<map>
using namespace std;
int main(void) 
{
    vector< vector<int> > vc;
    vector<int> vc1;
    map<int , list<int > > mp;
}

Теперь, как я могу взять ввод в vector < vector <int > > и напечатать каждый элементvc, и аналогично, как я могу взять ввод в map < int , list < int > > mp и распечатать каждый список, соответствующий каждому ключу карты.

1 Ответ

0 голосов
/ 02 октября 2019

Давайте сделаем это вместе. vector<int> v; vector - это оболочка из чистого массива, выделенного новым оператором, поэтому к его элементам можно обратиться, применив арифметику указателя. v[i], *(v.begin() +i) доступ к i-му элементу. Индексирование от 0. Как выполнить итерацию

for(int i = 0; i < v.size; i++) cout << v[i] << endl;
for(int x: v) cout << v[i] << endl;
for(auto it = v.begin(); it != v.end(); ++it) cout << v[i] << endl;

Давайте рассмотрим другой пример map<int, list<int> > mp; Это не линейная структура данных, а древовидная. Но итерация похожа. for(auto node: mp) где узел std:: pair<int, list<int>> Внутри этого цикла for вы можете получить list<int> с выражением node.second и повторить его аналогичным образом.

for(auto node: mp)// node is pair<int, list<int> >
{  int key = node.first;
   cout << key << " ";
   for(auto elem: node.second) // elem is int
      cout << elem << " ";
   cout << endl;
}
...