我是SGI的hash_map以及C ++语言的新手,所以请耐心等待。 我试图弄清楚如何初始化基本的hash_map并插入和删除它。
我已经将hash_map声明为:
Sgi::hash_map<int, Process*> ProcessManager::ListProcesses;
我打算用int值进行散列并存储指向Process类对象的指针。
然而,SGI文档非常模糊且无益。我正在阅读hash_map文件,但也不了解其中的大部分内容。有人能告诉我从SGI hash_map插入和删除的正确方法吗?
要明确:我正在寻找的是一个可以借鉴的基本例子。 拜托,谢谢!
答案 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;
变量months
是hash_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。