2012-08-08 4 views
2

다음은지도의 첫 번째 즉 0 번째 노드를 반환하는 것으로 보입니다. 나는이 코드가 잘못된 점을 이해하지 못한다.STL map.find가 잘못된 요소를 반환합니다.

map.find는 항상 첫 번째 (0 번째) 요소를 반환합니다. '삽입'호출에서 입력 내용이 무엇이든 관계 없습니다.

나는 STL에 다소 익숙하다. 그래서 어떤 도움을 주시면 감사하겠습니다. 여기에 누락 된 것이 있습니까?

class numbers{ 
public : 
    unsigned int data; 
    numbers(unsigned int value) { 
     data=value; 
    } 
}; 
bool operator<(numbers a, numbers b){ 
    return (a.data<b.data)?a.data:b.data; 
} 

class names{ 
public: 
    string s; 
    names(int value) { 
     char arr[10]; 
     itoa(value, arr, 10); 
     s=arr; 
    } 
    void print(){cout<<s;} 
}; 

void main(){ 
    map<numbers, names> bigmap; 
    for(int i=0;i<1000;i++) 
     bigmap.insert(pair<numbers,names>(numbers(i), names(i))); 
    cout<<"Inserted!"; 
    map<numbers, names>::iterator p; 
    p=bigmap.find(numbers(10)); 
    p->second.print();//output is always 0 
    getchar(); 
    //Large Lookup test 
} 

여기에 누락 된 것이 있습니까? D 개체를 미리 할당 한 다음 삽입 작업에 공급해야합니다. 나는 STL지도가 그들에게 미리 배정 될 것을 요구한다고 생각하지 않는다. 감사합니다. 그 도움에 대한 도움을 주시면 감사하겠습니다.

답변

8

비교 연산자가 잘못되었습니다. a0이고 이 0이고 LHS보다 작지 않은 경우 구현은 항상 true을 반환합니다. 비교 결과를 반환하십시오.

bool operator<(numbers a, numbers b){ 
    return (a.data<b.data); 
} 
+0

Thnx, 나는 그것을보고 싶다고 생각합니다. – confusednerd

관련 문제