개발자의 길

[C++] STL - pair, tuple, bitset 사용방법

토아드 2018. 4. 6. 22:19
반응형

pair


pair는 다양한 타입의 데이터 2개를 쌍으로 저장 할 수 있도록 해 주는 컨테이너다. 사용하기 위해서는 utility를 include 해줘야 된다.


멤버변수로는 first, second 두가지만 있으며 swap, assign operator, make_pair 등의 함수를 지원한다.


unordered_map에서 사용된다.


선언방법, 멤버함수 사용방법, 멤버변수 접근방법 등은 아래 코드를 참고하면 된다.



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
#include <utility> 
#include <iostream>
 
using namespace std;
 
int main()
{
    
    //선언
    pair <intstd::string> aPair;
    //선언과 대입
    pair <intstd::string> bPair (15"hello");
 
    //make_pair를 이용해 assign 하는 방법, 이 함수에서 인자를 넘기면 암묵적 변환이 된다고 한다.
    aPair = make_pair(22,"bye");
 
    //swap 함수 사용법, 두 pair의 value를 바꿔준다
    aPair.swap(bPair);
 
 
    //멤버변수 참조법
    cout << "aPair contains " << aPair.first << ", " << aPair.second << endl;
 
    return 0;
}
cs


출력 결과 (C++14)


aPair contains 15, hello
bPair contains 22, bye


tuple


tuple은 tuple이라는 라이브러리가 따로 존재한다. tuple은 서로 다른 자료형들을 여러개 저장할 수 있다는 점이 다르다. 또 std::tie, std::ignore, std::get 등을 이용해 컨테이너를 효과적으로 관리하는 것이 가능하다. (pair 또한 get으로 변수를 가져오는 것이 가능하다)


그리고 멤버변수를 직접 접근할 수가 없기 때문에 std::get이나 std::tie를 이용해서 접근해야 된다.


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
#include <iostream>
#include <tuple> 
 
using namespace std;
int main()
{
    
    // 선언
    tuple <intintstd::string> aTuple(10,23,"hiru");
    // 또다른 선언방법, auto 키워드와 make_tuple 함수를 이용해 간편하게 생성이 가능하다
    auto bTuple = std::make_tuple (20 , 21"hi"'z');
    std::get<0>(bTuple) = 100;
    
    int anumber; char achar; string astring;

    //저장된 변수 참조하기, get 함수를 통해 1번째 변수에 접근한다.
    anumber = std::get<0>(aTuple);
    
    /* 
    tie 함수를 통해 일괄적으로 변수에 대입하는 방법, 
    ignore는 특정 변수는 대입하지 않고 넘어가고 싶을 때 사용
    */    
    std::tie (std::ignore, std::ignore , astring, achar) = bTuple;
    
    cout << anumber << " " << astring << " " << achar << endl;
}
 

cs


출력 결과 (C++14)


10 hi z


bitset


bitset은 0과 1의 정보를 bool 배열의 형태로 저장하는 자료형이다. 그냥 bool 배열과의 차이점은 bitset 같은경우 대부분의 시스템에서 단 하나의 비트만을 저장한다는 것이다.


1의 갯수를 세어주는 함수, 1이 set 되어있는지 체크해주는 함수도 있고 기본 bitwise 연산자 또한 사용이 가능하다.


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
31
32
33
#include<iostream>
#include<string>
#include<bitset>
using namespace std;
int main(int args, char **argc)
{
    bitset<16> bitStream1 (0xffff);
    bitset<16> bitStream2 ("0101");
    
    
    //비트스트림의 길이와 1의 갯수를 출력
    int bitSize = bitStream1.size();
    int bitCount = bitStream2.count();
    cout << bitSize << " " << bitCount << endl;
    
    //인자로 주어진 index의 bit가 1인지 확인하는 함수
    bool isSet = bitStream2.test(3);
    
    //하나의 비트라도 set 되어있으면 true를 리턴
    bool anySet = bitStream2.any();
    cout << isSet << " " << anySet << endl;
    
    //특정 비트를 set 하는 함수
    bitStream2.set(1);
    cout << bitStream2 << endl;
    
    //특정 비트나 모든 비트를 reset 하는 함수
    bitStream2.reset(1);
    cout << bitStream2 << endl;
    bitStream2.reset();
    cout << bitStream2 << endl;
    
}
cs


출력 결과 (C++14)


16 2
0 1
0000000000000111
0000000000000101
0000000000000000



참고자료 : http://www.cplusplus.com/


반응형