我有一个应用程序(在 C++ 中),我需要在字符串和整数之间进行一组配对,即:
("david", 0)
("james", 1)
("helen", 2)
...
如果我们使用 java (key, value) 定义,我需要能够 (1) 搜索以查看映射中是否存在键并 (2) 检索与给定字符串 (key) 关联的值。在工作时java,我发现 HashMap 类型可以处理我需要的一切。
我想用 C++ 做同样的事情。我做了一些谷歌搜索,发现在 C++ 2011 库中有一个 unordered_map 类型可以复制它。我很好奇这是否是最好的方法。
在我的应用程序中,我对集合有以下规则
- 整数始终是连续的(根据示例)并从 0 开始。
- 整数值永远不会改变。
- Map 在应用程序开始时创建并且不会改变,即它是不可变的。
- 字符串键没有重复项。
- 创建地图后,我不知道需要使用多少键(以及扩展整数值)。我的应用程序的参数之一是包含要使用的单词列表的文本文件的目录。
- 我不关心与此相关的启动时间成本。我需要主要任务(即 containsKey(..) 和 get(key) 尽可能快)。它会被称为很多。该应用程序以处理大型文本语料库(即维基百科)和形成单词/文档之间的共现矩阵为中心。
我认为不是同时存储整数和字符串,而是将字符串存储在某种列表类型中,然后返回索引,即 data = { “david”, “james”, “helen”, … }
然后类似 find_Map(data, key) 的东西返回它所在的索引(值)。我认为这可以通过首先按升序排序并应用搜索算法来加快速度。但同样,这只是一个猜测。
我很欣赏这是一个常见问题,并且存在许多不同的方法。我将编写一些不同的想法,但我认为最好先让小组看看你们的想法。
原文由 DavidG 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
unordered_map<string,int>
。