[STL] 2차원 Vector

정영훈·2022년 8월 21일
0

알고리즘기초

목록 보기
3/6
post-custom-banner

2차원 벡터 선언

vector<vector<자료형>> 변수명;

기본코드

vector<vector<int>> v;
vector<int> tmp;
tmp.push_back(1);
tmp.push_back(2);
v.push_back(tmp);
cout<<v.at(0).at(0); //1출력
cout<<v[0][1]; //2출력

vector<vector<int>> v; : 벡터를 선언할 때 자료형을 벡터로 선언하면 벡터 자료형을 담을 수 있는 벡터 자료형으로 사용할 수 있음

vector<int> tmp; v.push_back(tmp); : 벡터에 자료를 넣을 때는 1차원 벡터를 선언해서 값을 저장한 뒤 2차원 벡터에 삽입할 수 있다.

cout<<v.at(0).at(0); : 2차원 배열의 첫번째 원소에 접근한다. 값을 push_back한 이후에 접근할 수 있다.

cout<<v[0][0]; : 배열과 같이 인덱스로 접근할 수 있다.

2차원 벡터 초기화

  • 벡터의 행과 열의 크기를 아는 경우 다음과 같이 벡터의 크기를 초기화 할 수 있다.
  • vector<vector<int>> n(n,vector<int>(m)); : N*M만큼 2차원 벡터 공간만 확보
  • vector<vector<int>> n(n,vector<int>(m,0)); : N*M만큼 2차원 벡터 0으로 값 초기화

🍰 예시 코드

#include<bits/stdc++.h>

using namespace std;

int main(){
    int n,m,cnt=1;
    cin>>n>>m;
    vector<vector<int>> v(n,vector<int>(m));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            v[i][j]=cnt++;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cout<<v[i][j]<<" ";
        }
        cout<<'\n';
    }

}

pair를 활용한 벡터 선언

pair컨테이너

  • Pair는 두개의 객체(first, second)를 하나로 묶어주는 역할을 하는 컨테이너로 벡터와 묶어 이차원 배열처럼 사용할 수 있다.

pair의 선언

  • pair<int,int> p; : int,int형 pair p를 선언함

pair 멤버함수

함수명기능예시
firstpair의 첫번째 인자 반환cout<<p.first;
secondpair의 두번째 인자 반환cout<<p.second;
make_pair(value1,value2)value1, value2를 쌍으로 하는 값을 생성pair<int,int> p;
p = make_pair(10,20);

vector와 함께 사용

  • vector<pair<int,int>> v; : pair를 원소로 가진 벡터 선언

예제

#include<bits/stdc++.h>
using namespace std;
int main(){
    vector<pair<int,int>> v1;
    vector<pair<int,int>> v2;
    int n;
    cin>>n;
    vector<pair<int,int>> v3(n);
    for(int i=0;i<n;i++){
        int t1,t2;
        cin>>t1>>t2;
        v1.push_back(make_pair(t1,t2)); //첫번째 방법
        v2.push_back({t1,t2}); //두번째 방법
        v3[i]={t1,t2}; //세번째 방법
    }
    for(int i=0;i<n;i++){
        //모두다 같은 값을 출력한다.
        cout<<v1[i].first<<" "<<v1[i].second<<'\n';
        cout<<v2[i].first<<" "<<v2[i].second<<'\n';
        cout<<v3[i].first<<" "<<v3[i].second<<'\n';
    }
}
profile
경북소프트웨어고등학교 정보교사
post-custom-banner

0개의 댓글