我有以下,似乎返回地图中的第一个即第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
}
Run Code Online (Sandbox Code Playgroud)
这里有什么我想念的吗?DI需要预先分配对象然后提供给插入操作.我不认为STL地图要求他们预先分配.谢谢,在这方面的任何帮助将不胜感激.
您的比较运算符是错误的.你的实现总是返回true,除非a是0和小于RHS,或者b是0和大于或等于LHS.只需返回比较结果即可.
bool operator<(numbers a, numbers b){
return (a.data<b.data);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1074 次 |
| 最近记录: |