在我正在编写的程序中,我想开发一种散列算法,它可以将 RGB 颜色、字符串或两者都映射到唯一且相对较小的索引。
这里的目标是尽可能减少碰撞,保证没有两种颜色通过算法是相似的(在感知上;例如红色、蓝色、橙色)。
以我有限的知识,数组似乎是直接访问数据结构的最佳选择,但我不想创建一个非常大的数组。鉴于我必须在 C++ 中为数组分配内存,我在开发这样的算法时遇到了麻烦。
任何提示表示赞赏!
您可以使用它的颜色或标签std::map
来访问它。Subject
无需为此开发自己的哈希算法,您所要做的就是创建比较运算符,在这种情况下这应该很容易,假设您使用 32 位整数作为 RGB 颜色,astd::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
非常快,我认为您不需要(或找到)比这更快的解决方案。