char数组(固定大小)和相等重载的集合

时间:2014-05-02 17:07:47

标签: c++ arrays char set

所以我想要使用一组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]?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您的示例中存在错误。 v2从未初始化。 v1设置两次。因此,您将垃圾值放入集合中。