2

私は次のものを持っています、それはマップの最初のすなわち0番目のノードを返しているようです。このコードの何が問題なのか理解できません。

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
}

ここで欠けているものはありますか?DIは、オブジェクトを事前に割り当ててから、挿入操作に供給する必要があります。STLマップで事前に割り当てる必要はないと思います。おかげで、その面での助けをいただければ幸いです。

4

1 に答える 1

8

比較演算子が間違っています。が RHS よりも小さい場合、またはがLHS よりも大きいか等しい場合をtrue除き、実装は常に戻りaます。比較の結果を返すだけです。0b0

bool operator<(numbers a, numbers b){
    return (a.data<b.data);
}
于 2012-08-08T07:17:08.420 に答える