在大字符串向量中查找更大的字符串向量
Find larger string vector in large string vector
在 C++ 中,检查大小约为800,000 看看它是否在另一个大约的字符串向量中。大小 200,000?我的目标是将在第二个中找到的第一个的所有字符串推入第三个。
我的初学者尝试永远不会停止运行:
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 中的值将是 setA 和 setB 的重叠值。
这些问题也可能有所帮助。 How to convert a vector to a set
How to get set intersection
在 C++ 中,检查大小约为800,000 看看它是否在另一个大约的字符串向量中。大小 200,000?我的目标是将在第二个中找到的第一个的所有字符串推入第三个。
我的初学者尝试永远不会停止运行:
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 中的值将是 setA 和 setB 的重叠值。
这些问题也可能有所帮助。 How to convert a vector to a set
How to get set intersection