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