stdext ハッシュマップに関連する非常に奇妙なことに直面しました。多くのオブジェクトを扱う必要があり、要素にすばやくアクセスすることが優先されます。私のプログラムはファイルからオブジェクト値を読み取り、それが新しい要素の場合は、この値をハッシュマップに挿入し、既に処理されたオブジェクトの場合は、ハッシュマップに格納されている値を変更します。
私の問題はに関連していhashmap(stdext)ます。このコンテナの初期化オプションが見つかりません。
キー要素は符号なし整数 ( uint64) であり、そのオブジェクトはこのキーを使用してハッシュマップに格納され、サイズは 160 KB です。
プログラムは動作していますが、hashmap 内のオブジェクトの数が制限に達すると、あまりにも待たなければなりません。
この後、期待どおり、ハッシュマップは再び正常に機能しています。多分それは再編成のステップだと思いました。
ただし、これらの手順は重要です。通常の処理手順は約 2 ~ 3 分ですが、特定の数のオブジェクトを処理した後、この手順を実行するには 5 時間かかります。この後、処理は「通常」になります。
誰もそのような問題に直面しましたか?このハッシュマップについてもっと詳しいことを知っている人はいますか? このトピックに関連するものは見つかりませんでした。
ハッシュマップ パラメータをデフォルト以外の値で使用しようとしています:bucket_sizeおよびmin_buckets. このデフォルト値はbucket_size=4とmin_buckets=8です。これらの値をコードから変更できなかったため、xhash ファイルでそれらをより大きな値に変更しました。私のアプリケーションではそれが重要だと思いますmin_buckets。再編成のステップを避けて、より良いパフォーマンスを得るために「微調整」しようとしています。
しかし、別の問題が発生したため、ハッシュマップをクリアしようとするまで、すべてが正常に機能します。時間がかかります。デフォルト値で使用すると、非常に高速に実行されます。
xhashファイルを変更するのは悪いステップでしたか? 以前にデフォルト以外の値を使用した人はいますか? この遅いクリアの理由は何ですか?
2 番目の質問は、ハッシュマップにポインターを格納することに関するものです。アイデアは明らかですが、ポイントされたメモリを解放するにはどうすればよいでしょうか。オブジェクトへのポインターを作成する必要があります。これらのポインターはハッシュマップに格納され、値が必要な場合は、このポインターを逆参照することができます。しかし、マップを保存した後、どうすればメモリをクリアできますか? 些細な質問かもしれませんが、今は解決策がわかりません。
すでに投稿された回答に感謝します。