字符集(固定大小)和式重载

Sets of char arrays (fixed size) and equality overload

本文关键字:重载 字符集      更新时间:2023-10-16

所以我想使用Set of 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("%lun", setValues.count(v1));
    free(v1);
    free(v2);
    return EXIT_SUCCESS;
}

不幸的是,这个程序的输出是"0"。假设v1和v2之间的字符是相同的,我希望输出是"1"(我插入了v2并试图找到v1)。

我怎么能这样做,使集合比较数组的值(而不是指针,因为它似乎做)?我已经搜索并尝试重载操作符"=="但没有成功,人们似乎说重载"()"就足够了…

还有一件事:我也不确定set的分配。我知道在我的程序执行结束时,我的集合将有100个数组,所以我想知道是否有一种方法可以直接为集合分配100 * char[4] ?

非常感谢!

您的示例中有一个错误。V2从未初始化。V1被设置了两次。因此,您正在将垃圾值放入集合中。