开发哈希算法:RGB 颜色 ID 和字符串到 int

Developing a Hashing Algorithm: RGB Color ID and String to Int

本文关键字:字符串 int ID 颜色 哈希 算法 RGB 开发      更新时间:2023-10-16

在我正在编写的程序中,我想开发一种哈希算法,该算法可以将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非常快,我认为您不需要(或找到)任何比这更快的解决方案。