• struct, struct vector, typedef, using
    C++ 2021. 8. 28. 13:47
    반응형
    struct(구조체)

    여러 개 변수 묶어서 쓰고자 할 때 사용

    클래스와 비슷하게 멤버 변수, 멤버 함수를 가짐 (public)

    #include <iostream>
    
    struct Rectangle {
        int width;
        int height;
    
        int area() {
            return width * height;
        }
    
        int area(int extraWidth, int extraHeight) {
            return (width + extraWidth) * (height + extraHeight);
        }
    };
    
    int main() {
        Rectangle rect = {9, 9};
    
        std::cout << "Default area: " << rect.area() << '\n';
        std::cout << "Area with extra space: " << rect.area(2, 8) << '\n';
        
        return 0;
    }
    Default area: 81
    Area with extra space: 187

     

    ** C++에서는 그냥 struct를 쓰면 된다. **

    typedef 붙여서 struct 선언했던 건 C 스타일!

    C에서는 typedef 없이 struct로 선언할 경우, 변수 선언할 때마다 struct Rectangle rect; 처럼 앞에 struct 키워드를 붙여줘야 했다.

     

    typedef

    타입 재정의 (별칭 부여)

    복잡한 자료형을 간단하게 줄여서 쓸 수 있음

    std::map<int, std::vector<std::string>> longTypeMap;
    
    typedef std::map<int, std::vector<std::string>> NewMap;
    NewMap m;

     

    using

    C++11 이후 typedef의 역할 대체

    더 간결하고 직관적.

    std::map<int, std::vector<std::string>> longTypeMap;
    
    using NewMap = std::map<int, std::vector<std::string>>;
    NewMap m;

    그냥 using을 쓰자.

     

    구조체 벡터의 정렬

    algorithm 헤더에 포함된 sort()를 사용해서 구조체 멤버 변수 값을 기준으로 데이터를 정렬시켜 보자.

    비교 함수의 리턴 값은 <(오름차순), >(내림차순) 이다.

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    
    struct Score {
        int kor;
        int eng;
        std::string name;
    };
    
    bool compareScore(Score a, Score b) {
        // kor 값이 같을 경우 eng 값이 커지는 순서로 정렬
        if (a.kor == b.kor)
            return a.eng < b.eng;
            
        // 아닐 경우 kor 값이 작아지는 순서로 정렬
        return a.kor > b.kor;
    }
    
    int main() {
        std::vector<Score> scores = {
            {90, 100, "hj"},
            {100, 90, "yb"}
        };
    
        sort(scores.begin(), scores.end(), compareScore);
    
        for (const auto &sc : scores) {
            std::cout << sc.name << ": " << sc.kor << ", " << sc.eng << '\n';
        }
        
        return 0;
    }
    yb: 100, 90
    hj: 90, 100

     

     

    반응형

    'C++' 카테고리의 다른 글

    find  (0) 2021.08.28
    map  (0) 2021.07.11
    입출력 조작자, 포맷 함수  (0) 2021.07.11
    stoi() - string to int  (0) 2021.07.06
    멀티스레드 환경에서 vector 사용, pair  (0) 2021.07.06

    댓글

ABOUT ME

공부한 것을 기록하기 위해 블로그를 개설했습니다.

VISIT

/