[C , C++]

C++ vector sort() 벡터 클래스 변수 기준 정렬

말하는펭귄 2021. 1. 13. 13:06
728x90
반응형

 

 

클래스 객체를 담는 벡터에서 클래스 변수 값을 기준으로 벡터를 정렬하는 방법

 

sort(begin, end, compareFunction)

compareFunction에 비교 조건을 정의할 boolean 반환 사용자 정의 함수를 추가해주면 된다

const와 &를 통해서 레퍼런스로 받아와야 한다.

★class의 함수를 통해 변수를 알아내려면 그 함수도 const로 정의해야 한다.

 

class object {
    int var;
public:
    int getVar() const {return var;}
};
cs

 

bool compareFunction(const object &o1, const object &o2) {
     return o1.getVar() > o2.getVar();
}
cs
 
sort(Vec.begin(), Vec.end(), compareFunction);
cs

 

 

 


 

예시 코드: MST Kruskal 알고리즘에서 간선 저장 벡터를 가중치 기준으로 정렬

 

class Edge {
    int v1;
    int v2;
    int w;
public:
    Edge(int ver1, int ver2, int weight): v1(ver1), v2(ver2), w(weight) {}
    int getWeight() const { return w; }
    int getV1() { return v1; }
    int getV2() { return v2; }
};
 
bool compareWeight(const Edge& n1, const Edge& n2) {
    return n1.getWeight() < n2.getWeight();
}
cs

 

int main() {
    cin >> V >> E;
 
    int A, B, C;
    for (int i = 0; i < E; i++) {
        cin >> A >> B >> C;
        eVec.push_back(Edge(A, B, C));
    }
 
    sort(eVec.begin(), eVec.end(), compareWeight);
 
    Kruskal();
}
cs

 

 

 

728x90
반응형