在C ++中,检查大小约为的字符串向量中每个元素的最快方式(或者是正确的方式)是什么。 800,000,看看它是否在另一个字符串向量约。大小200,000?我的目标是将第二个中的所有字符串推到第二个字符串中。
我的初学者尝试永远不会停止运行:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<form role="form">
<div class="container">
<div class="row my-margin">
<div class="col-xs-12">
<input type="number" class="form-control">
</div>
</div>
<div class="row">
<div class="col-xs-4">
<input type="number" class="form-control">
</div>
<div class="col-xs-4">
<input type="number" class="form-control">
</div>
<div class="col-xs-4">
<input type="number" class="form-control">
</div>
</div>
</div>
</form>
答案 0 :(得分:2)
如果可以对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;
}
答案 1 :(得分:1)
你可以做什么把每个矢量放到像这样的集合中:
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