-
struct, struct vector, typedef, usingC++ 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