在大字符串向量中查找较大的字符串向量
Find larger string vector in large string vector
在C++中,检查大小约为800000的字符串向量中的每个元素,看看它是否在另一个大小约为200000的字符串向量上,最快的方法(或体面的方法(是什么?我的目标是把在第二局中找到的第一局的所有弦都推到第三局。
我的初学者尝试永远不会停止运行:
vector<string> combosVsWords(vector<string> words, vector<string> lettercombos)
{
vector<string> firstwords;
for (int i = 0; i != lettercombos.size(); i++)
{
if (find(words.begin(), words.end(), lettercombos[i]) != words.end())
firstwords.push_back(lettercombos[i]);
}
}
如果vectors
可以排序,那么以下内容应该使用std::set_intersection
:
#include <algorithm>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
//...
using namespace std;
vector<string> combosVsWords(vector<string>& words,
vector<string>& lettercombos)
{
vector<string> firstwords;
// Sort the vectors
sort(words.begin(), words.end());
sort(lettercombos.begin(), lettercombos.end());
// get the set intersection of the vectors and place
// the result in firstwords
set_intersection(words.begin(), words.end(), lettercombos.begin(),
lettercombos.end(), back_inserter(firstwords));
return firstwords;
}
您可以做的是将每个向量放入一个集合中,如:
std::set<std::string> setA (vectorA.begin(), vectorA.end()), setB (vectorB.begin(), vectorB.end());
然后得到集合的交集,如:
std::set<int> intersect;
set_intersection(setA.begin(),setA.end(),setB.begin(),setB.end(),
std::inserter(intersect,intersect.begin()))
intersect中的值将是集合A和集合B中的重叠值。
这些问题可能也会有所帮助。如何将矢量转换为集合
如何设置交叉点
相关文章:
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 在将字符串放入字符串向量时遇到问题?
- 如何从字符串向量构造对象并避免复制?
- 如何在目录及其子文件夹中构建文件名字符串向量?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 将字符串向量中的字符串放入主字符串中
- 如何在 c++ 中从字符串向量中读取
- 用字符串的向量分配字符串向量
- 如何使用 STL 算法将整数向量转换为字符串向量?
- C++ 中字符串向量的索引
- 如何根据第二列/第三列等对字符串向量进行排序?
- 如何从输入中获取字符串向量?
- 使用 C++-17,如何从字符串向量填充元组
- 对于循环增量器不能用作字符串向量的索引
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 如何从字符串向量中选择第 n 个位置?
- 如何将csv中的数据放入c++中的字符串向量中,而绝对没有任何作用
- 反转不带反转函数的字符串向量
- 如何在字符串向量中指向const int
- 如何在字符串向量中找到某个值