0

私が書いているプログラムでは、RGBカラー、文字列、またはその両方を一意の比較的小さなインデックスにマップできるハッシュアルゴリズムを開発したいと思います。

ここでの目標は、アルゴリズムを通過する2つの色が類似しないことを保証して、できるだけ多くの衝突を減らすことです(知覚的には、赤、青、オレンジなど)。

私の限られた知識では、配列は直接アクセスデータ構造に最適な選択のようですが、信じられないほど大きな配列を作成したくありません。配列にC++でメモリを割り当てる必要があることを考えると、そのようなアルゴリズムの開発に問題があります。

ヒントは大歓迎です!

4

1 に答える 1

1

色またはラベルでstd::mapにアクセスするために使用できます。Subjectそのために独自のハッシュアルゴリズムを開発する必要はありません。必要なのは、比較演算子を作成することだけです。これは、RGBカラーに32ビット整数を使用し、を使用すると仮定すると、この場合は簡単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非常に高速です。それよりも高速なソリューションは必要ないと思います(または見つけることはできません)。

于 2012-07-07T15:07:47.127 に答える