2012-08-08 59 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

您的比較運算符是錯誤的。您的實施將始終返回true,除非a0且小於RHS,或b0並且大於或等於LHS。只需返回比較結果即可。

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

Thnx,我想我錯過了。 – confusednerd 2012-08-08 07:20:34