可视化C++数据结构,最好能容纳一个大的名称列表

visual C++ Data Structure that would be best to hold a large list of names

本文关键字:一个 列表 数据结构 C++ 能容纳 可视化      更新时间:2023-10-16

您能分享一下您对存储大量名称并对这些名称执行搜索的最佳STL数据结构的想法吗?

编辑:这些名字并不是唯一的,随着新名字的不断添加,这个列表可能会不断增加。总的来说,我说的是100万到1000万个名字。

由于要搜索名称,因此需要一个支持快速随机访问的结构。这意味着vector、deque和list都是不可能的。此外,向量/数组对排序集的随机添加/插入速度较慢,因为它们必须移动项目才能为每个插入的项目腾出空间。不过,添加到末尾的速度非常快。

考虑std::mapstd::unordered_mapstd::unordered_multimap(或者它们的兄弟std::setstd::unordered_setstd::unordered_multiset,如果您只存储密钥)。

如果您纯粹要进行唯一的随机访问,我会从一个无序的容器开始。

如果您需要存储一个有序的名称列表,并且需要执行范围搜索/迭代和排序操作,那么像std::mapstd::set这样的基于树的容器应该比基于哈希的容器更好地执行迭代操作,因为前者将存储与其逻辑前代和后代相邻的项。对于随机访问,O(log N)仍然是不错的。

在std::unordered_*之前,我使用std::map为对象缓存保存大量对象,尽管有更快的随机访问容器,但它的扩展性足以满足我们的使用。较新的无序映射具有O(1)访问时间,因此它是一个散列结构,应该会为您提供接近最佳的访问时间。

您可以考虑使用分隔符连接这些名称的可能性,但搜索可能会受到影响。你需要想出一个调整后的二进制搜索。

但你应该先尝试一个显而易见的解决方案,那就是一个在stl中被称为unordered_map的hashmap。看看这是否符合你的需求。在那里搜索应该很快,但要消耗内存。