Study Record

[C++] 자주 사용되는 라이브러리 본문

알고리즘/c++ 기본

[C++] 자주 사용되는 라이브러리

초코초코초코 2021. 11. 29. 16:31
728x90

1. vector 라이브러리

#include <iostream>
#include <vector>
#pragma warning (disable:4996)

int main() {
	// 형식 : vector<자료형> 변수이름;
	vector<int> a;

	// 마지막 원소 뒤에 원소를 삽입한다.
	a.push_back(3);
	
	// 원소의 개수를 리턴한다.
	a.size();
	
	// 원소를 얻는 방법
	std::cout << a[0];

	// 첫번째 원소를 얻는다.
	a.front();

	// 마지막 원소를 얻는다.
	a.back();

	// 마지막 원소를 제거한다.
	a.pop_back();

	// 모든 원소를 제거하지만 메모리는 남아있다.
	a.clear();

	// size가 0이면 true, 아니면 false
	a.empty();

	return 0;
}

 

2. stack 라이브러리

#include <iostream>
#include <stack>
#pragma warning (disable:4996)
using namespace std;

int main() {

	// 형식: stack<자료형> 변수이름;
	stack<int> s;

	// push
	s.push(3);

	// pop : top에 있는 원소를 삭제한다.
	s.pop();

	// top에 있는 원소를 리턴한다.
	s.top();
	
	// 사이즈 반환
	s.size();

	// 스택이 비어있으면 true, 아니면 false
	s.empty();

	// pair 를 이용한 스택
	stack<pair<int, int>> pair_s;

	// 스택에 (1,3) 원소를 push 한다.
	pair_s.push(make_pair(1, 3));

	// top 원소 가져와서 사용하기 ex) (1,3)
	pair_s.top().first;		// 1
	pair_s.top().second;	// 3

	return 0;
}

 

3. queue 라이브러리

#include <iostream>
#include <queue>
#pragma warning (disable:4996)
using namespace std;

int main() {
	// 형식: queue<자료형> 변수이름;
	queue<int> q;

	// 큐에 원소를 추가한다. 
	q.push(3);
	q.push(5);
	q.push(6);

	// 큐의 제일 앞에 있는 원소 반환 -> 3
	cout << q.front() << endl;

	// 큐의 제일 뒤에 있는 원소 반환 -> 6
	cout << q.back() << endl;

	// 큐 특성에 따라 처음에 넣었던 순서대로 꺼낸다. -> 3 꺼낸다.
	q.pop();
	
	// 큐의 사이즈 반환
	q.size();

	// 큐가 비어있으면 true, 아니면 false
	q.empty();

	// pair를 이용한 큐
	queue<pair<int, int>> pair_q;

	// pair를 이용한 큐 push
	pair_q.push(make_pair(1, 3));

	// pair를 이용한 큐 front
	pair_q.front().first;	// 1
	pair_q.front().second;	// 3

	return 0;
}

 

※ 우선순위 큐 - queue 라이브러리

#include <iostream>
#include <queue>
#pragma warning (disable:4996)
using namespace std;

int main() {
	// 우선순위 큐 사용하기 - 기본 내림차순
	priority_queue<int> priority_q_des;
	
	// push - 원소 넣기
	priority_q_des.push(3);
	priority_q_des.push(1);
	priority_q_des.push(5);
	priority_q_des.push(4);

	// 비어있으면 true, 아니면 false
	priority_q_des.empty();

	// 사이즈 반환
	priority_q_des.size();

	// 맨 앞(제일 처음)에 있는 원소 출력
	priority_q_des.top();

	// 맨 앞에 있는 원소 꺼내기 - 현재 맨 위에 있는 원소는 5
	priority_q_des.pop();

	// 원소 출력해보기 - 4  3  1
	while (!priority_q_des.empty()) {
		cout << priority_q_des.top() << "  ";
		priority_q_des.pop();
	}

	cout << endl;

	// 오름차순으로 사용하기 - 음수로 활용
	priority_queue<int> priority_q_asc;

	priority_q_des.push(-3);
	priority_q_des.push(-1);
	priority_q_des.push(-5);
	priority_q_des.push(-4);

	// 원소 출력해보기 - 1  3  4  5
	while (!priority_q_des.empty()) {
		cout << -priority_q_des.top() << "  ";
		priority_q_des.pop();
	}

	cout << endl;

	// 2개 이상일 경우 첫번째가 동일할 경우, 두번째를 기준으로 내림차순으로 저장된다.
	priority_queue<pair<int, int>> priority_pair_q;
	
	priority_pair_q.push(make_pair(2, 1));
	priority_pair_q.push(make_pair(5, 1));
	priority_pair_q.push(make_pair(1, 1));
	priority_pair_q.push(make_pair(5, 5));
	priority_pair_q.push(make_pair(5, 2));

	// 원소 출력해보기 - (5 , 5)  (5 , 2)  (5 , 1)  (2 , 1)  (1 , 1)
	while (!priority_pair_q.empty()) {
		int first = priority_pair_q.top().first;
		int second = priority_pair_q.top().second;

		cout << "(" << first << " , " << second << ")  ";

		priority_pair_q.pop();
	}

	return 0;
}

 

4. algorithm 라이브러리

#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>		// 난수 생성
#pragma warning (disable:4996)
using namespace std;
class Student{
public:
	string name;
	int age;

	Student(string n, int a) {
		this->name = n;
		this->age = a;
	}
};

bool compare(Student a, Student b) {
	if (a.name == b.name) {
		return a.age < b.age;    // 나이는 적은 순
	}
	else {
		return a.name < b.name;  // 사전순
	}
}
// sort() 함수는 기본 퀵정렬을 사용한다.
int main() {
	int arr[9] = { 3, 7, 4, 1, 0, 9 ,2, 5, 8 };

	// 오름차순 정렬
	sort(arr, arr + 9);

	// 확인 - 0  1  2  3  4  5  7  8  9
	for(int i = 0; i < 9; i++) {
		cout << arr[i] << "  ";
	}

	cout << endl;

	// 내림차순 정렬
	sort(arr, arr + 9, greater<int>());
	
	// 확인 - 9  8  7  5  4  3  2  1  0
	for (int i = 0; i < 9; i++) {
		cout << arr[i] << "  ";
	}

	cout << endl;

	// vector 를 활용한 sort
	srand((int)time(NULL)); //난수생성을 위해

	vector<int> v;

	for (int i = 0; i < 7; i++) { //vector에 1의자리 숫자를 임의로 삽입
		v.push_back(rand() % 50);
	}

	sort(v.begin(), v.end());  // 오름차순

	for (int i = 0; i < v.size(); i++) {
		cout << v[i] << "  ";
	}

	cout << endl;
	
	// compare 함수를 활용한 정렬
	vector<Student> compare_v;

	compare_v.push_back(Student("amy", 20));
	compare_v.push_back(Student("boo", 10));
	compare_v.push_back(Student("amy", 5));
	compare_v.push_back(Student("hoo", 20));
	compare_v.push_back(Student("amy", 30));

	sort(compare_v.begin(), compare_v.end(), compare);

	// (amy , 5) (amy, 20) (amy, 30) (boo, 10) (hoo, 20)
	for (int i = 0; i < compare_v.size(); i++) {
		cout << compare_v[i].name << " , " << compare_v[i].age << endl;
	}

	return 0;
}

 

5. map 라이브러리 - 파이썬의 딕셔너리

#include <map>
#include <iostream>

int main(){
    // map<키형식, 값형식> 변수이름;
    map<string, string> map1;

    // map 에 요소 추가하기 
    map1.insert({"map", "od2"});   // 키 - map , 값 = od2
    map1.insert(pair<string, string>("maa2", "odd"));    // 키 - maa2 , 값 = odd

    // map에 키를 이용하여 삭제하기  ex) key = Alice
    map1.erase("Alice");

    // map 모든 요소 삭제
    map1.clear();

    // map 에 키를 사용하여 값 얻기
    cout << map1["map"] << endl;

    // map 에 키가 존재하는지 찾기
    if (map1.find("add") != map1.end()) {
        // 키가 존재한다.
    }
    else {
        // 키가 존재하지 않는다.
    }

    // 반복문으로 접근
    for (auto iter = map1.begin(); iter != map1.end(); iter++) {
        cout << iter->first << " " << iter->second << endl; 
    }
    
    return 0;
}
728x90