找到某些字符串更好(空间/时间):
使用字符串向量(按字母顺序排列)和二进制搜索。
使用字符串的BST(也按字母顺序排列)。
或两者都相似?
答案 0 :(得分:3)
两者都有优势,并且取决于您的使用场景。
如果您的使用场景可以分为几个阶段,那么排序后的矢量会更有效:加载所有内容,然后对其进行排序,然后查看内容而不更改任何内容。
如果您的方案涉及在不同时间插入,搜索和删除事物,并且您无法将其分解为阶段,则树结构将更适合您。 (在这种情况下,向量可能会增加开销,因为在中间插入是很昂贵的。)
在Effective STL中有一个非常好的讨论,Loki中有一个排序的矢量实现。
答案 1 :(得分:3)
假设二进制搜索树是平衡的(如果你使用std :: set则会是这样),那么这两者都是O(n)空间和O(log n)时间。所以理论上它们是可比较的。
在实践中,矢量将占用更少的空间,因此可能由于局部效应而稍微更快。但可能还不够重要,因为std :: set支持O(log n)插入,O(log n)删除,并且有一个简单的接口,我建议使用std :: set。
那说...如果你关心的只是查询而你不需要按顺序枚举字符串,std :: tr1 :: unordered_set(或boost :: unordered_set或C ++ 0x std :: unordered_set)将比任何一个快得多,特别是如果集合很大。哈希表摇滚。