0

在我正在编写的程序中,我想开发一种散列算法,它可以将 RGB 颜色、字符串或两者都映射到唯一且相对较小的索引。

这里的目标是尽可能减少碰撞,保证没有两种颜色通过算法是相似的(在感知上;例如红色、蓝色、橙色)。

以我有限的知识,数组似乎是直接访问数据结构的最佳选择,但我不想创建一个非常大的数组。鉴于我必须在 C++ 中为数组分配内存,我在开发这样的算法时遇到了麻烦。

任何提示表示赞赏!

4

1 回答 1

1

您可以使用它的颜色或标签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非常快,我认为您不需要(或找到)比这更快的解决方案。

于 2012-07-07T15:07:47.127 回答