티스토리 뷰

c++/개념

2차원 vector

백수진 2021. 3. 21. 01:39

<<2차원 vector의 구조>>

vector <vector <type>공백> 벡터이름(줄수, vetor<type>(칸수)>

 

*tip

- 2차원 벡터를 사용할 때 공백을 무조건 써줘야 가능

- 2차원 벡터를 초기화하고 싶다면, (칸수, 초기화 값)으로 작성하면 됨

 


//인접리스트를 사용해 메모리를 줄일 수 있다.
#include <vector>
#include <iostream>
using namespace std;

int main()
{
	int n = 6, m = 8;
	vector <int> v[7];
	for (int i = 0; i < m; i++)
	{
		int a, b;
		cin >> a >> b;
		v[a].push_back(b);
		v[b].push_back(a);
	}

	for (int i = 1; i <= n; i++)
	{
		cout << i << "->";
		for (int j = 0; j < v[i].size(); j++)
		{
			cout << v[i][j] << ' ';
		}
		cout << '\n';
	}
	return 0;
}

2차원 벡터를 사용해 인접리스트로 구현한다면 칸수의 사이즈를 초기화하지 않고 vector마다에 push_back()해주며 2차원으로 사용이 가능하다.

 

<<위의 코드 분석>>

n은 노드의 개수(=정점의 개수), m은 연결노드의 줄수.

vetor <int> v[7]일때 7은 정점의 개수+1개를 하여 6번까지 줄수를 나타냄.

벡터의 각 줄에 push_back을 해주면 stack처럼 사용할 수 있음

각 줄마다 칸의 개수가 push_back()해준 개수가 될 것이며 vector[몇번노드].size[]를 하면 각각 저장하고 있는 size를 알 수 있음.

 

<<기억하기>>

vector[i].size()의 활용법 

vector[연결노드의 개수+1]을 통해 각 노드마다의 연결노드를 담을 vector준비

vector[i].push_back(k) k를 vector[i]에 스택처럼 넣어줘 2차원으로 만들기

'c++ > 개념' 카테고리의 다른 글

deque - 덱  (0) 2021.03.22
pair  (0) 2021.03.21
스택 컨테이너 사용법  (0) 2021.03.21