-1

私は SGI の hash_map も C++ 言語も初めてなので、ご容赦ください。基本的な hash_map を初期化し、そこから挿入および削除する方法を理解しようとしています。

hash_map を次のように宣言しました。

Sgi::hash_map<int, Process*> ProcessManager::ListProcesses;

int 値でハッシュし、クラス Process のオブジェクトへのポインターを格納するつもりです。

ただし、SGI のドキュメントは非常に曖昧で役に立ちません。hash_map ファイルを読んでいますが、その多くを理解していません。SGI hash_map から挿入および消去する適切な方法を教えてもらえますか?

明確にするために:私が探しているのは、学ぶべきBASICの例です。よろしくお願いします!

4

2 に答える 2

1

SGIドキュメントの例の何が問題になっていますか?これは、hash_mapを宣言する方法とそれに値を追加する方法を明確に示しています。

hash_map<const char*, int, hash<const char*>, eqstr> months;

months["january"] = 31;
months["february"] = 28;
months["march"] = 31;

その変数monthsは、hash_map型のキーを使用し、const char*それらを型の値にマップしますint。ポインタ値を比較してキーを比較したくないため、2つの文字列が同じであるかどうかを示すカスタムの等式ファンクタを使用します。コンテンツ。eqstrconst char*

消去するには、eraseメンバー関数を使用します。

size_type erase(const key_type& k) キーがkである要素を消去します。

つまり、次のようになります。

months.erase("march");

SGIのドキュメントはあいまいではありません。

于 2012-06-28T22:29:18.647 に答える
-1

次のことができます。

Sgi::hash_map<int, Process*> ListProcesses;

Process *p1; // Initialize these
Process *p2;

//Insertion
ListProcesses[10] = p1;  // new element inserted
ListProcesses[20] = p2;  // new element inserted

//Erase
ListProcesses.erase(20);  //(20,p2) deleted

ildjarn がコメントしたように、SGI の代わりにstd::unordered_map<>を使用できます。

于 2012-06-28T22:33:55.853 に答える