在大字符串向量中查找更大的字符串向量

时间:2015-07-05 03:42:01

标签: c++ vector find large-data

在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>

2 个答案:

答案 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

How to get set intersection