0

int のトリプレットでアクセスする一意の要素のコンテナーが必要です。各 int は 1.000.000.000 を超える可能性があります。

(実際に埋められるのはこれらの要素のほんの一部であり、実際にはこれらの要素は boost::unordered_map そのものです)。

boost::multiindex (または、おそらく私が知らない他の何か) のような multiindex 配列を持つ方が速いですか?

4

1 に答える 1

2

マルチインデックスはあなたが望むものではありません。タイプがトリプルである単一のインデックスが必要なようです。(実際に 3 つの独立したインデックスが必要な場合を除きます。誤解がある場合は、コメントを残してください。)

ひもを使わないでください。トリプルをキーとして使用するだけです:

typedef std::tuple<int, int, int> key_type;

を使用するstd::map<key_type, T>と、対数ルックアップが得られますが、これで十分な場合があります。これ以上の作業を行う必要さえないと思います (タプルに対してデフォルトで辞書式比較が定義されているかどうかはわかりません)。

std::unordered_map<key_type, T>(またはブースト バージョン)を使用する場合は、ハッシュ関数を定義する必要があります。Boost にはすでにタプル用のものがあると思いますが、C++11 にはありません。hash_combine()しかし、Boost コードを切り取ることができることに基づいて、自分で実装するのは非常に簡単です。

于 2011-09-04T13:30:04.723 に答える