我是SGI hash_map和C++语言的新手,所以请耐心等待。我正在尝试弄清楚如何初始化基本hash_map并从中插入和删除。
我宣布hash_map如下:
Sgi::hash_map<int, Process*> ProcessManager::ListProcesses;
我打算按 int 值进行哈希处理并存储指向类 Process 对象的指针。
然而,SGI的文件非常模糊和无益。我正在通读hash_map文件,但也不了解其中。有人可以告诉我在SGI hash_map中插入和擦除的正确方法吗?
需要明确的是:我正在寻找一个可以学习的基本示例。请,谢谢!
SGI 文档中的示例有什么问题? 它清楚地显示了如何声明hash_map以及如何向其添加值。
hash_map<const char*, int, hash<const char*>, eqstr> months;
months["january"] = 31;
months["february"] = 28;
months["march"] = 31;
该变量months
是一个使用类型为 const char*
的键并将它们映射到类型 int
的值的hash_map
,并且由于您不想通过比较相等的指针值来比较键,因此它使用名为 eqstr
的自定义相等函子,该函子表示两个const char*
字符串是否具有相同的内容。
要擦除,请使用erase
成员功能,疯狂的嗯。
size_type erase(const key_type& k)
擦除键为 k 的元素。
所以这将是:
months.erase("march");
SGI的文件远非含糊不清。
您可以执行以下操作。
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的。