可视化C++数据结构,最好能容纳一个大的名称列表
visual C++ Data Structure that would be best to hold a large list of names
您能分享一下您对存储大量名称并对这些名称执行搜索的最佳STL数据结构的想法吗?
编辑:这些名字并不是唯一的,随着新名字的不断添加,这个列表可能会不断增加。总的来说,我说的是100万到1000万个名字。
由于要搜索名称,因此需要一个支持快速随机访问的结构。这意味着vector、deque和list都是不可能的。此外,向量/数组对排序集的随机添加/插入速度较慢,因为它们必须移动项目才能为每个插入的项目腾出空间。不过,添加到末尾的速度非常快。
考虑std::map
、std::unordered_map
或std::unordered_multimap
(或者它们的兄弟std::set
、std::unordered_set
和std::unordered_multiset
,如果您只存储密钥)。
如果您纯粹要进行唯一的随机访问,我会从一个无序的容器开始。
如果您需要存储一个有序的名称列表,并且需要执行范围搜索/迭代和排序操作,那么像std::map
或std::set
这样的基于树的容器应该比基于哈希的容器更好地执行迭代操作,因为前者将存储与其逻辑前代和后代相邻的项。对于随机访问,O(log N)仍然是不错的。
在std::unordered_*之前,我使用std::map
为对象缓存保存大量对象,尽管有更快的随机访问容器,但它的扩展性足以满足我们的使用。较新的无序映射具有O(1)访问时间,因此它是一个散列结构,应该会为您提供接近最佳的访问时间。
您可以考虑使用分隔符连接这些名称的可能性,但搜索可能会受到影响。你需要想出一个调整后的二进制搜索。
但你应该先尝试一个显而易见的解决方案,那就是一个在stl中被称为unordered_map的hashmap。看看这是否符合你的需求。在那里搜索应该很快,但要消耗内存。
- 链表,将列表复制到另一个列表
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素
- 打印一个列表给出错误,指出迭代器不可递减
- C++:从两个包含子类 (typedef) 的列表创建一个列表
- 在 std 列表中查找对象并将其添加到另一个列表
- 在c++中遍历一个列表并在另一个列表中搜索每个元素
- 我在 C++ 中创建了一个列表容器类,但它没有按预期工作
- 如何通过赋值运算符重载将一个列表复制到另一个列表上?C++
- 正在将指针复制到assign运算符中的另一个列表元素
- 在c++中传递一个列表作为返回类型
- 如何在c++中创建一个列表及其内容常量
- C++:如何将迭代器设置为另一个列表中的结构内的列表
- C++ std::sort 引用另一个列表的自定义比较函数
- 如何让数组在下一次输入之前显示数组内容的前一个列表?
- 如果我创建一个列表:<T>:迭代器,有没有办法重载++(增量)运算符?
- 我如何解码一个列表的列表
- 如何在c++中用一个目录中的所有文件夹填充一个列表框
- c++遍历一个列表来调用某个函数