gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:53:15 26 4
gpt4 key购买 nike

我有以下内容,它似乎返回了 map 中的第一个节点,即第 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
}

我在这里遗漏了什么吗? D 我需要预先分配对象,然后提供给插入操作。我认为 STL 映射不需要预先分配。谢谢,在这方面的任何帮助将不胜感激。

最佳答案

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

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

关于c++ - STL map.find 返回不正确的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11859485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com