관리자 글쓰기
STL 컨테이너
2024. 7. 29. 13:52 - pingu-s

벡터

 

#include <iostream>
#include <vector>

using namespace std;

vector<int> v;
vector<int> v2 = {1, 2, 3, 4, 5};
vector<int> v3(4, 3);
vector<int> v4(v3);

 

#include <iostream>
#include <vector>

using namespace std;

// 빈 2차원 벡터 선언
vector<vector<int>> v1;

// 특정 크기로 초기화된 2차원 벡터
int rows = 3;
int cols = 4;
vector<vector<int>> v2(rows, vector<int>(cols));

// 특정 값으로 초기화된 2차원 벡터
int val = 9;
vector<vector<int>> v3(rows, vector<int>(cols, val));

// 초기화 리스트를 사용한 2차원 벡터 초기화
vector<vector<int>> v4 = {
  {1, 2, 3},
  {4, 5, 6},
  {7, 8, 9}
};

 

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> vec = {1, 2, 3, 4, 5};

  // 인덱스 2의 원소를 10으로 수정
  vec[2] = 10;
  
  return 0;
}

 

맨 뒤에 원소를 삽입할 때는 push_back(), 맨 뒤에 있는 원소를 삭제할 때는 pop_back() 메서드를 활용

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> v = {2, 3, 4, 5};

  // 맨 뒤에 원소 삽입
  v.push_back(6);

  // 맨 뒤에 원소 삭제
  v.pop_back();

  return 0;
}

 

맨 앞에 원소를 삽입할 때는 insert(), 맨 앞의 원소를 삭제할 때는 erase() 메서드를 사용

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> v = {2, 3, 4, 5};

  // 맨 앞에 원소 삽입
  v.insert(v.begin(), 1); // v: {1, 2, 3, 4, 5}

  // 맨 앞의 원소 삭제
  v.erase(v.begin()); // v: {2, 3, 4, 5}

  return 0;
}

 

 

#include <iostream>
#include <set>

using namespace std;

set<int> s1; // 빈 셋 선언
set<int> s2 = {3, 1, 3, 2, 5}; // 초기화 리스트를 사용한 셋 초기화
set<int> s3(s2); // 다른 셋을 사용하여 초기화

 

#include <iostream>
#include <set>

using namespace std;

int main() {
  set<int> numbers = {1, 2, 3, 4, 5};
  int targets[] = {3, 7}; // 원소가 3과 7인 배열

  for (int target : targets) {
    // set에서 원소를 탐색하는 방법
    auto it = numbers.find(target);

    if (it != numbers.end()) {
      cout << "원소 " << target << "를 찾았습니다. 값: " << *it << endl;
    } else {
      cout << "원소 " << target << "를 찾지 못했습니다." << endl;
    }
  }

  return 0;
}
/*
  원소 3를 찾았습니다. 값: 3
  원소 7를 찾지 못했습니다.
*/

 

#include <iostream>
#include <set>

using namespace std;

int main() {
  set<int> s = {1, 3, 2, 1, 5};

  // 원소 4 삽입
  s.insert(4);

  // 원소 2 삭제
  s.erase(2);

  // 원소 4가 있는지 확인 후 삭제
  auto it = s.find(4);
  if (it != s.end()) {
    s.erase(it);
  }

  return 0;
}

 

 

#include <iostream>
#include <map>
#include <string>

using namespace std;

// 빈 맵 선언
map<string, double> employeeSalaries;

map<string, double> studentGrades = {
  {"John", 3.7},
  {"Emma", 3.9},
  {"Sophia", 4.0}
};

 

맵에서 특정 키에 접근하는 방법, [] 연산자 활용하기, find() 메서드 활용하기

#include <iostream>
#include <map>

using namespace std;

int main() {
  // 맵 생성
  map<string, int> studentScores;

  // 키-값 쌍 추가
  studentScores["Alice"] = 95;
  studentScores["Bob"] = 88;
  studentScores["Charlie"] = 92;

  // [] 연산자를 사용하여 키에 접근 - 키가 있는 경우
  int score1 = studentScores["Alice"];
  cout << score1 << endl; // 출력값 : 95

  // [] 연산자를 사용하여 키에 접근 - 키가 없는 경우
  int score2 = studentScores["rabbit"];
  cout << score2 << endl; // 출력값 : 0

  // find() 메서드를 사용하여 키에 접근
  auto it = studentScores.find("Charlie");
  if (it != studentScores.end()) {
    int score3 = it->second;
    cout << score3 << endl; // 출력값 : 92
  }

  return 0;
}

 

#include <iostream>
#include <map>

using namespace std;

int main() {
  map<string, int> myMap = {{"Apple", 1}, {"Banana", 2}, {"Cherry", 3}};

  // "Banana" 키에 해당하는 값을 10으로 수정
  myMap["Banana"] = 10;

  return 0;
}

 

맵에 원소를 삽입할 때 insert() 메서드 또는 [] 연산자를 활용, 삭제할 때는 erase() 메서드를 사용

#include <iostream>
#include <map>

using namespace std;

int main() {
  map<int, string> myMap;

  myMap.insert(make_pair(1, "Apple"));
  myMap.insert({2, "Banana"});
  myMap[3] = "Cherry";

  for (const auto &pair : myMap) {
    cout << pair.first << ": " << pair.second << endl;
  }
  /*
    1: Apple
    2: Banana
    3: Cherry
  */

  // 삭제
  myMap.erase(2);

  for (const auto &pair : myMap) {
    cout << pair.first << ": " << pair.second << endl;
  }
  /*
  1: Apple
  3: Cherry
  */

  auto it = myMap.find(3);
  if (it != myMap.end()) {
    myMap.erase(it);
  }

  // 삭제 후 맵 출력
  for (const auto &pair : myMap) {
    cout << pair.first << ": " << pair.second << endl;
  }
  /*
  1: Apple
  */
  
  return 0;
}

 

정렬되지 않은 셋과 맵

 

정렬되지 않은 셋을 사용하려면 #include<unordered_set>, 정렬되지 않은 맵을 사용하려면 #include<unordered_map>을 추가

#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
  unordered_set<int> myUnorderedSet;

  // 삽입
  myUnorderedSet.insert(3);
  myUnorderedSet.insert(1);
  myUnorderedSet.insert(4);
  myUnorderedSet.insert(2);

  for (int num : myUnorderedSet) {
    cout << num << " ";
  }
  cout << endl;

  // 출력값: 2 4 1 3
  return 0;
}

 

#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
  unordered_map<string, int> myUnorderedMap;

  // 삽입
  myUnorderedMap["apple"] = 3;
  myUnorderedMap["banana"] = 1;
  myUnorderedMap["cherry"] = 4;
  myUnorderedMap["date"] = 2;

  // unordered_map의 요소 출력
  for (const auto& pair : myUnorderedMap) {
    cout << pair.first << ": " << pair.second << endl;
  }

  /*
  출력값 :
  date: 2
  cherry: 4
  banana: 1
  apple: 3
  */
  
  return 0;
}

 

'개발 > C++' 카테고리의 다른 글

배열  (0) 2024.07.30
STL 알고리즘  (0) 2024.07.29
문법 정리  (0) 2024.07.25
배열, 리스트, 벡터  (1) 2024.04.30
C++ 생성자와 정적 멤버3  (0) 2022.05.16