목차

STL

Standard Template Library. 많이 쓰이는 자료구조와 알고리즘을 구현해 놓은 라이브러리.

vector

동적 배열.

#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

값으로 정렬하기

일단 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> 를 추가한다.

참고

std::copy

dump

#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);
}