반응형
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 <int, std::string> aPair; //선언과 대입 pair <int, std::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 <int, int, std::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; } |
출력 결과 (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/
반응형
'개발자의 길' 카테고리의 다른 글
[C++] C++에서 string 문자열을 받아와 split 하기 (0) | 2018.09.15 |
---|---|
[Java, Android] Date, Calendar 클래스를 이용해 시간 표현하기 (0) | 2018.09.02 |
[Data Structure] Binary Search Tree - 이진 탐색트리 (0) | 2018.05.17 |
[Design pattern] gof의 디자인 패턴 소개 (0) | 2018.05.01 |
해시 함수와 해시 테이블 자료구조란 무엇일까? (0) | 2018.03.22 |