当前位置:  开发笔记 > 编程语言 > 正文

在向量中找到特定字符串的最好方法是什么?

如何解决《在向量中找到特定字符串的最好方法是什么?》经验,为你挑选了2个好方法。

例如.我有一些结构:

s_Some{
  std::string lable;
  s_some_junk some_junk;
};

一个矢量:

std::vector mSome;

然后我用很多s_Somes填充这个向量.

我需要为这个向量中的单个s_Some找到一个迭代器,它有一个特定的标签.到目前为止,我只是遍历所有这些垃圾,并将每个标签与想要的那个匹配.这看起来有点愚蠢.有没有更好的方法呢?



1> Anonymous..:

选项1)如果你被迫使用std :: vector,但是一旦向量被填充它保持不变,那么你可以对向量进行排序并使用二进制搜索.唯一的成本是排序然后没有额外的开销.搜索时间是对数O(logN).

选项2)如果你有自由并可以选择不同的数据结构,那么考虑使用map(也是对数)或unordered_map(期望的O(1),最差的O(n)).

我刚刚注意到你说你想要将每个标签与正在寻找的标签相匹配.所以我得出结论,你可以有重复的标签.然后对于第2点使用相应的multi_map容器,而对于第1点,事情变得有点混乱.



2> Frederick Th..:

如果您只搜索几次,或者每次搜索时您的矢量可能会有不同的内容,那么很遗憾没有其他选择; 你将不得不遍历整个向量.

但是,如果您的矢量在创建后不会更改,并且您必须运行大量搜索,请执行以下操作:

    按字符串的升序排序向量(它们在字典中的方式,即).

    一旦这样排序,对所有搜索使用二进制搜索算法.

这会快得多.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有