Standard Template Library. 많이 쓰이는 자료구조와 알고리즘을 구현해 놓은 라이브러리.
동적 배열.
#include <iostream> #include <vector> using namespace std; void main() { int num; int i; printf("배열 크기를 입력하시오 : "); scanf("%d",&num); vector<int> vi(num); for (i=0;i<num;i++) { vi[i]=i*2; } for (i=0;i<num;i++) { printf("vi[%d]=%dn",i,vi[i]); } printf("벡터의 크기는 %d입니다.n",vi.size()); }
일단 map에 있는 값을 vector로 복사한다.
std::vector<std::pair<K,V> > vec(map.begin(), map.end());
다음으로 정렬을 수행한다. 부스트(boost)를 이용할 경우 다음과 같다.
std::sort<vec.begin(), vec.end(), boost::bind(&std::pair<K, V>::second, _1) < boost::bind(&std::pair<K, V>::second, 2));
만약 STL만 이용하겠다면 다음과 같이 먼저 템플릿 스트럭쳐를 정의한다.
template<template <typename> class P = std::less > struct compare_pair_second { template<class T1, class T2> bool operator()(const std::pair<T1,T2>&left, const std::pair<T1,T2>&right) { return P<T2>()(left.second, right.second); } };
다음으로 다음과 같이 실제 정렬을 수행한다.
// 오름차순 std::sort(v.begin(), v.end(), compare_pair_second<std::less>()); // 내림차순 std::sort(v.begin(), v.end(), compare_pair_second<std::greater>());
std::less
또는 std::greater
를 사용하려면 #include <functional>
를 추가한다.
#include <iostream> #include <vector> #include <algorithm> using namespace std; template<typename C> void dump(const char *desc, C c) { cout.width(12); cout << left << desc << "==> "; copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; } void main() { int someNum[] = {1,1,2,3,5,8,13}; vector<int> vi(&someNum[0], &someNum[7]); dump("입력 완료 후",vi); }