-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是 a hash_map,它使用 type 的键const char*并将它们映射到 type 的值int,并且因为您不想通过比较指针值是否相等来比较键,所以它使用了一个名为的自定义相等函子eqstr,它表示两个const 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 评论的那样,您可以使用std::unordered_map<>而不是 SGI 。

于 2012-06-28T22:33:55.853 回答