开发哈希算法:RGB 颜色 ID 和字符串到 int
Developing a Hashing Algorithm: RGB Color ID and String to Int
在我正在编写的程序中,我想开发一种哈希算法,该算法可以将RGB颜色,字符串或两者映射到唯一且相对较小的索引。
这里的目标是减少尽可能多的碰撞,并保证通过算法传递的两种颜色都不会相似(感知上;例如红色,蓝色,橙色)。
以我有限的知识,数组似乎是直接访问数据结构的最佳选择,但我不想创建一个非常大的数组。鉴于我必须为数组分配内存C++,我在开发这样的算法时遇到了麻烦。
任何提示都值得赞赏!
您可以使用
std::map
通过颜色或标签访问Subject
。无需为此开发自己的哈希算法,您所要做的就是创建比较运算符,在这种情况下应该很容易,假设您使用 32 位整数作为 RGB 颜色,并使用std::string
作为 label
。
编辑:实际上,除了地图(没有自定义运算符)之外,您不需要制作任何其他内容,就像:
typedef map<int, MyClass*, greater<int> > IntClassMap;
typedef map<std::string, MyClass*, greater<std::string> > StrClassMap;
IntClassMap inttable;
StrClassMap strtable;
void adding_the_data(){
inttable[0x11223344] = myclasspointer1;
inttable[0x11223345] = myclasspointer2;
inttable[0x11223346] = myclasspointer3;
strtable["test string1"] = myclasspointer1;
strtable["test string2"] = myclasspointer2;
strtable["test string3"] = myclasspointer3;
}
void accessing_example(){
strtable["test string1"]->something;
}
std::map
非常快,我认为您不需要(或找到)任何比这更快的解决方案。
相关文章:
- 我如何获取从 C++ 到 C 的映射<字符串、int>#
- 构造<int>具有 2 个字符串文字的向量
- 字符串中int的加法运算
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- cin >> int 给定一个字符串将 int 赋值为 0
- 将字符串中的 int 转换为字母;
- 使用 switch,但我想用字符串而不是 int 进行选择
- 两个数组,int 和 string,如何显示带有对应 int 的字符串?
- 从字符串流中读取具有特定字段宽度的 int
- win 表单应用程序字符串^ 到 int
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 将字符串转换为 int 后的随机值
- 如何检查字符串是否正确以将其转换为 int?
- 在 c++ 中逐个字符从字符串传递到 int 时不精确
- <int> 使用 fmt 库将向量转换为字符串
- 我正在尝试将 int 值插入字符串,而不是 1,我得到 10
- 为什么编译:字符串 = int
- C++ 隐式类型转换字符串 -> int?
- 如何在C++中连接字符串+int+字符串