2013-06-07 3 views
1

벡터 배열이 다음과 같은 규칙에 따라 정렬된다고 가정합니다. A [i] (a, b)의 모든 쌍과 A c, d)를 A [j] a> c 및 b> d에 대입하면된다. 입력 배열은 소트되고 있다고 보여집니다. 이제 위의 유형의 배열, 쌍의 벡터 배열에 대한 하한 함수 <int, int>

A[0] = (0,1) 
A[1] = (4,3), (2,5) 
A[2] = (12,4), (10, 6) 
... 

지금 어떻게 붙박이 LOWER_BOUND 기능을 사용하여 LOWER_BOUND를 찾을 입력으로 한 쌍을 부여. 코드를 작성했으나 error을 제공합니다. 내가 뭘 놓치고 있니?

template<class FI, class T, class Comp> 
FI lower_bound(FI first, FI last, const T& value, Comp comp); 

그래서, 당신은 네 번째 인수로 비교기를 전달할 수 있습니다 :

#include<stdio.h> 
#include<algorithm> 
#include<vector> 
using namespace std; 
typedef pair<int,int> mypair; 
vector <mypair> A[100008]; 
mypair B; 
bool operator < (const mypair &a1, const mypair &a2){ 
    return (a1.first < a2.first && a1.second < a2.second); 
} 
bool operator < (const vector<mypair> &a1, const mypair &a2){ 
     for(int i = 0; i< a1.size();i++){ 
      if (a1[i] < a2) 
       return true; 
     } 
     return false; 
} 
bool operator < (const mypair &a1, const vector<mypair> &a2){ 
     for(int i = 0; i< a2.size();i++){ 
      if(a1 < a2[i]) 
       return true; 
     } 
     return false; 
} 
int main() 
{ 
    int N,x,y; 
    scanf("%d",&N); 
    int cnt = 0; 
    for(int i=0;i<N;i++){ 
     scanf("%d %d",&x,&y); 
     B = make_pair(x,y); 
     // consider A as filled up as stated 
     x = lower_bound(A,A+N,B) - A; 
    } 
    return 0; 
} 
+0

도 작동 할 수는 데이터 구조를,하지만 당신은 제안 할 수 있습니다 모든 편집 때문에 벡터 배열을 얻을 수 있습니까? –

+0

누가 처음부터 바로 벡터가 정렬되도록 값을 입력 할 것인가? lower_bound를 사용하려면 먼저 배열을 정렬해야합니다. 왜냐하면 이진 검색을 기반으로하는 알고리즘이기 때문입니다. –

+0

@PhilipStuyck 주요 문제는 lower_bound 부분과 관련이있어서 정렬 된 입력으로 문제를 테스트하고있었습니다. –

답변

4

기능 lower_bound도 4 개 인수 과부하

bool cmp(const vector<mypair> &a1, const mypair &a2){ 
    for(int i = 0; i< a1.size();i++){ 
     if (a1[i] < a2) 
      return true; 
    } 
    return false; 
} 

// ... 

x = lower_bound(A,A+N,B, cmp) - A; 
+2

템플릿 전문화 이외의 것을'std'에 추가하는 것은 정의되지 않은 동작입니다. * C++ 프로그램의 동작은 별도로 지정하지 않는 한 네임 스페이스 std 또는 네임 스페이스 std 내의 네임 스페이스에 선언 또는 정의를 추가하면 정의되지 않습니다 *. 또한, 이것은'x'가'int'로 선언되었지만'lower_bound'가 반복자를 리턴한다는 사실을 다루지 않습니다. – Yuushi

+0

@Yuushi, 네, 고마워요. – soon

+0

<연산자가 작동하는 것을 무시하는 이전 코드를 작성했습니다 (lower_bounds 찾기). 네임 스페이스에 넣거나 네 번째 요소로 비교기를 전달할 필요가 없습니다. 벡터 배열 을 다룰 때 특별한 것은 무엇입니까? –

관련 문제