C++/따배C++ 16강 STL
[C++/CPP] 16.01. Standard Template Libraries, containers
polarcompass
2022. 1. 2. 20:11
728x90
#include<iostream>
#include<vector>
#include<string>
#include<deque>
#include<set>
#include<map>
#include<stack>
#include<queue>
using namespace std;
void sequence_containers()
{
// vector
{
vector<int> vec;
for (int i=0; i < 10; ++i)
// 뒤로만 추가
vec.push_back(i);
for(auto & e : vec)
cout << e << " ";
cout << endl;
}
// deque
{
// 앞, 뒤로 추가 가능
deque<int> deq;
for (int i = 0; i < 10; ++i)
{
// 뒤로 추가
deq.push_back(i);
// 앞으로 추가
deq.push_front(i);
}
for(auto & e : deq)
cout << e << " ";
cout << endl;
cout << endl;
}
}
void associative_containers()
{
cout << "< set >" << endl;
// set
// 중복 안됨.
{
set<string> str_set;
str_set.insert("Hello");
str_set.insert("World");
str_set.insert("Hello");
cout << str_set.size() << endl;
for (auto & e: str_set)
cout << e << " ";
cout << endl;
cout << endl;
}
cout << "< multiset >" << endl;
// multiset : duplication is allowed
// 중복 허용
{
std::multiset<string> multi_set;
multi_set.insert("Hello");
multi_set.insert("World");
multi_set.insert("Hello");
cout << multi_set.size() << endl;
for (auto & e : multi_set )
cout << e << " ";
cout << endl;
cout << endl;
}
cout << "< map : key / value >" << endl;
// map : key / value
{
std::map<char, int> dict;
dict['a'] = 10;
dict['b'] = 20;
dict['c'] = 50;
cout << dict['a'] << endl;
dict['a'] = 100;
cout << dict['a'] << endl;
for ( auto & e : dict)
// e.first -> key 값
// e.second -> value 값
cout << e.first << ":" << e.second << " ";
cout << endl;
cout << endl;
}
cout << "< multimap >" << endl;
// multimap : duplicted keys
{
std::multimap<char, int> map;
// Before c++ 14, pair<char, int>('a',10)
map.insert(std::pair('a', 10));
map.insert(std::pair('b', 10));
map.insert(std::pair('c', 10));
map.insert(std::pair('a', 100));
cout << map.count('a') << endl;
for( auto & e : map)
{
cout << e.first; // key
cout << ":";
cout << e.second; // value
cout << " ";
}
cout << endl;
cout << endl;
}
}
void container_adapters()
{
// stack
{
cout << " Stack " << endl;
std::stack<int> stack;
stack.push(1); // push adds a copy
stack.emplace(2); // emplace constructs a new object
stack.emplace(3);
cout << stack.top() << endl;
stack.pop(); // top 제거
cout << stack.top() << endl;
cout << endl;
}
// queue
{
cout << "Queue" << endl;
std::queue<int> queue;
queue.push(1);
queue.push(2);
queue.push(3);
cout << queue.front() << " " << queue.back() << endl;
queue.pop();
cout << queue.front() << " " << queue.back() << endl;
cout << endl;
}
// Priority queue
{
cout << "Priority queue" << endl;
std::priority_queue<int> queue;
for(const int n : {1, 8, 5, 6, 3, 4, 0, 9, 7, 2})
queue.push(n);
for (int i = 0; i < 10; ++i)
{
cout << queue.top() << endl;
queue.pop();
}
cout << endl;
}
}
int main()
{
sequence_containers();
cout << endl;
associative_containers();
cout << endl;
container_adapters();
return 0;
}
728x90