gpt4 book ai didi

c++ - 麻烦添加到 map

转载 作者:行者123 更新时间:2023-11-28 00:30:38 25 4
gpt4 key购买 nike

我正在尝试使用自定义比较器构建 map ,但是,我无法弄清楚的地方出了问题,无法将项目添加到 map (具体来说,只能添加第一个项目)

struct byKey
{
bool operator () ( const Key &key1, const Key &key2) const {
return key1.keytoInt() < key2.keytoInt();
}
};

其中 Key 类有一个 private char[5],比如

char[0]=1, char[1]=2, char[3]=13, char[4]=20, char[5]=28

有一个匹配去确保char digit[5]中的所有字符(小于32)都可以转换为一个字符。比如char=0,它会查表,找到一个字符喜欢一个

我用Key中的一个方法把它转成int,然后和int比较

int Key ::  keytoInt() const{
int sum;
sum=atoi(digit);
return sum;
}

我构建了一个 map 表,键和值都是 Key 类型,但是,在尝试测试它时,我无法向表中添加项目,我不确定哪里出了问题。

没有编译错误,但是,逻辑上,即使我插入了 3 次 map,map.size() 显示只有一个

map<Key,Key,byKey> firstmap;  
map<Key,Key>::iterator it;
firstmap.insert(pair<Key,Key>(base,stepguess));
firstmap.insert(pair<Key,Key>(stepguess,base));
firstmap[stepguess]=base;
cout << "wait";
cout << "mymap.size() is " << firstmap.size() << '\n';

最佳答案

任何时候您将 key 转换为整数以进行比较时,最好直接比较字段。在这种特殊情况下,请考虑使用 memcmp,例如:

bool operator()(const Key& lhs, const Key& rhs) {
return memcmp(lhs.digit, rhs.digit, sizeof(Key::digit)) < 0;
}

atoi 在这种情况下将始终返回 0,除非您的值是有效的 ASCII 数字(这些不是)。

关于c++ - 麻烦添加到 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23037944/

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