所以我想要使用一组char [4],这样我就可以在其中存储这样的数组并检查元素是否已经存在。我今天开始使用C ++,所以我绝对不是专家。以下是我目前所做的事情:
struct Comparator {
bool operator()(unsigned char* s1, unsigned char* s2) const {
for (int i = 0; i < 4; ++i) {
if (s1[i] != s2[i]) {
return s1[i] < s2[i];
}
}
return false;
}
};
int main(int argc, const char* argv[]) {
set<unsigned char*, Comparator> setValues;
unsigned char *v1 = (unsigned char*) malloc(4);
unsigned char *v2 = (unsigned char*) malloc(4);
v1[0] = 'a';
v1[1] = 'b';
v1[2] = 'c';
v1[3] = 'd';
v1[0] = 'a';
v1[1] = 'b';
v1[2] = 'c';
v1[3] = 'd';
setValues.insert(v2);
printf("%lu\n", setValues.count(v1));
free(v1);
free(v2);
return EXIT_SUCCESS;
}
不幸的是,这个程序的输出是&#34; 0&#34;。鉴于v1和v2之间的字符相同,我希望输出为&#34; 1&#34; (我插入v2并试图找到v1)。
我怎么能这样做,集合比较数组的值(而不是像它似乎做的那样)?我已经搜索并尝试重载运算符&#34; ==&#34;没有成功,人们似乎说超载&#34;()&#34;够了......
另一件事:我对套装分配也不太了解。我知道我的程序集在程序执行结束时会有100个数组,所以我想知道是否有办法直接为该集合分配100 * char [4]?
非常感谢!
答案 0 :(得分:1)
您的示例中存在错误。 v2从未初始化。 v1设置两次。因此,您将垃圾值放入集合中。