SGI hash_map:基本查询

时间:2012-06-28 22:21:39

标签: c++ hashmap hashtable sgi

我是SGI的hash_map以及C ++语言的新手,所以请耐心等待。 我试图弄清楚如何初始化基本的hash_map并插入和删除它。

我已经将hash_map声明为:

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

我打算用int值进行散列并存储指向Process类对象的指针。

然而,SGI文档非常模糊且无益。我正在阅读hash_map文件,但也不了解其中的大部分内容。有人能告诉我从SGI hash_map插入和删除的正确方法吗?

要明确:我正在寻找的是一个可以借鉴的基本例子。 拜托,谢谢!

2 个答案:

答案 0 :(得分:1)

SGI docs中的示例有什么问题?它清楚地显示了如何声明hash_map以及如何向其添加值。

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

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

变量monthshash_map,它使用const char*类型的键并将它们映射到int类型的值,因为您不想比较通过比较指针值的相等性,它使用名为eqstr的自定义等式functor来表示两个const char*字符串是否具有相同的内容。

要删除你使用erase成员函数,疯狂呃。

size_type erase(const key_type& k)删除键为k的元素。

那就是:

months.erase("march");

SGI文档远非模糊。

答案 1 :(得分:-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。