STL map.find返回不正确的元素

时间:2012-08-08 07:15:12

标签: c++ stl maps

我有以下内容,它似乎正在返回地图中的第一个即第0个节点。我无法弄清楚这段代码有什么问题。

map.find始终返回第一个(第0个)元素。无论在'insert'调用中构造什么输入。

我对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地图要求他们预先分配。 谢谢,在这方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:8)

您的比较运算符错误。您的实施将始终返回true,除非a0并且小于RHS,或b0并且大于或等于LHS 。只需返回比较结果。

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