字符集(固定大小)和式重载
Sets of char arrays (fixed size) and equality overload
所以我想使用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被设置了两次。因此,您正在将垃圾值放入集合中。
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 将重载的成员函数传递给函数模板
- c++:可变模板和函数重载
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 重载==不适用于二进制树
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 正在尝试重载二进制搜索树分配运算符
- 重载Singly Linked List中的赋值运算符
- 字符集(固定大小)和式重载