2중 벡터 정렬은 어떻게 하나요 ?

  • 룡이
    룡이

    C 스타일의 배열만 주로 사용하다가..C++ 스타일의 벡터를 좀 익혀보려고 하고 있는데요..
    vector< vector > 나 vector< struct Point > 같은
    벡터내의 벡터나, 벡터내의 구조체를 갖는 구조를 sort 함수로 어떻게 정렬하나요 ?
    몇가지 해봤는데... 컴파일은 되는데, 탑코더에서 세그멘테이션 폴트가 나네요.
    int maxLength;
    struct Point {
    vector x; // 다 같은 크기로 사용할 겁니다. int* x 로 선언해서 x = new int[10]; 이런식으로도 해봤는데 안되네요
    int c;
    };
    // vector x 를 순서대로 보면서 작은 인덱스가 크면 true 를 리턴하는 비교함수입니다.
    inline bool comp(const Point& p1, const Point& p2) {
    f(i,0,maxLength) {
    if(p1.x[i] > p2.x[i])
    return true;
    else if(p1.x[i] < p2.x[i])
    return false;
    }
    return true;
    }
    class A {
    public:
    string B(vector numbers, int k) {
    string rr="";
    maxLength = 무언가 어싸인;
    vector< Point > p;
    f(i,0,36) {
    Point t;
    t.x.resize(maxLength);
    t.c = i;
    p.push_back(t);
    }
    f(i,0,36)
    f(j,0,maxLength)
    p[i].x[j] = 0;
    sort(p.begin(), p.end(), comp);
    return rr;
    }
    };
    sort 함수를 하지 않으면 결과가 원하던대로 잘 나오는데요.
    sort 함수만 콜 하면 세그멘테이션 폴트가 나네요.
    구조체 내에 동적메모리 할당이 없는 경우에는 문제가 없는거 같은데요,
    vector 나 안에 동적배열 변수를 넣게되면 sort 함수의 비교연산자를 다르게 선언해야 하나요 ?

    [이 글은 과거 홈페이지에서 이전된 글입니다. 원문보기]

    15년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan
    1. x 는 그냥 고정 길이 배열을 쓰는 것이 낫지 않은지.. ^^;2. 내가 보기엔 comp 함수에 문제가 있는데. 두 원소가 완전히 같으면 false 를 리턴해야 함. (p1 < p2 여부를 반환하는 것이니) 그 때문에 sort() 가 오동작했을 가능성이 있음

    15년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.