달력

06

« 2017/06 »

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  

'삽질예방/STL 교과서'에 해당되는 글 4

  1. 2009.04.24 set_union
  2. 2008.03.16 소팅하기.
  3. 2008.01.09 vector, list, hash_map 사용하기
  4. 2008.01.07 C++ STL의 교과서
2009.04.24 02:37

set_union 삽질예방/STL 교과서2009.04.24 02:37

STL에 set을 가만 보면
우리가 원하는 연산이 없습니다.

합집합, 교집합, 차집합 연산이 바로 그것이죠
그런데 사실 그러한 연산들은 STL내에 알고리즘 형태로 어떤 컨테이너(예.벡터)에서도
사용할 수 있도록 제네릭하게 제공되고 있습니다.

set<string> a;
set<string> b;
set<string> c;

a.insert("abc");
a.insert("def");
b.insert("abc");
b.insert("123");

set_union(s.begin(), s.end(), b.begin(), b.end(), inserter(c, c.begin()));

for(set<string>::iterator it = c.begin(); it != c.end(); it++)
{
   cout << *it << endl;
}


결과는

123
abc
def


입니다.

set_union검색하시면, 차집합과 교집합을 어떻게 하는지도 나와있습니다.
일반화된 함수라 사용법이 조금 까다롭기에 혹시 도움이 될까 올립니다.

저작자 표시
신고
Posted by Kwang-sung Jun
2008.03.16 08:11

소팅하기. 삽질예방/STL 교과서2008.03.16 08:11

stl에서 소팅하기...



예를 들어 다음과 같은 벡터가 있다고 하자.

struct MovieRating {
    short movieId;
   char rating;
   unsigned int time;
};

vector<MovieRating> UserData;

이번 예에서는 시간적인 순서에 따라 정렬하고 싶은게다. 시간은 그냥
time()이 리턴하는 시간, 즉 seconds passed since epoch(대충 0년 이후 지금까지 몇초가 흘렀는지)가 기록되어있다.


bool CmpInc(MovieRating a, MovieRating b); // just adeclaration...
.
.
sort(UserData.begin(), UserData.end(), TimeCmpInc);
.
.

// increasing order, 오름차순, 갈수록 숫자가 커지도록...
bool CmpInc(MovieRating a, MovieRating b)
{
    return a.time < b.time;
}


음... 별다른설명 필요한가..



신고
TAG sort, Sorting, stl
Posted by Kwang-sung Jun

필수적인 변수들.

vector<int> newVector;
vector<int>::iterator vectorIt;
list<int> newList;
list<int>::iterator listIt;
hash_map<int, char*> newHash;
hash_map<int, char*> hashIt;


값의 대입

newVector.push_back(3);
newList.push_back(3);
newHash[3] = "fuct you";



이터레이터의 이용

for (vectorIt = newVector.begin(); vectorIt != newVector.end(); vectorIt++)
{
    DoWhatYouWant();
    cout << (*vectorIt) << endl;
}

for (hashIt = newHash.begin(); hashIt!= newHash.end(); hashIt++)
{
    DoWhatYouWant();
    cout << "value: " << hashIt->first << ", key: " << hashIt->second << endl;
}


vectorIt는 이터레이터 이자 , (*vectorIt)라 하면 현재 iterator가 가리키고 있는 원소가 리턴된다.
hashIt또한 이터레이터인데, hashIt->first는 키를 리턴, hashIt->second는 밸류를 리턴한다.

참고로 hashIt는 표준이 아니라고 한다. 그러나 별 문제없이 아직 잘쓰고 있으니 ^^;

원소찾기

newVector.find(3)


리턴값은 newVector::iterator형이다.
만약 찾지 못한다면 newVector.end()와 동등한 값을 리턴한다.

신고
Posted by Kwang-sung Jun
2008.01.07 04:57

C++ STL의 교과서 삽질예방/STL 교과서2008.01.07 04:57

http://ws1.kist.re.kr/doc/pgC++_lib/stdlibug/booktoc1.htm

링크 그대로 따올 기술없는 나를 용서하자.


신고
Posted by Kwang-sung Jun


티스토리 툴바