如何在C++中获得两个向量共有的字符?

Dra*_*ake 8 c++ comparison vector

我试图比较两个矢量对象,并返回一个包含出现在两个向量中的所有字符的向量.

如果不编写一些非常复杂的手动方法,我将如何解决这个问题,该方法将第一个向量中的每个字符与第二个向量中的每个字符进行比较,并使用if将其添加到第三个向量(如果它们匹配则将返回).

也许我缺乏对矢量的真实经验让我想象这将比实际更难,但我怀疑有一些我通过搜索无法找到的简单方法.

Mic*_*fik 10

我想你在找std::set_intersection.必须对源向量进行排序.如果您不关心输出向量的顺序,则可以始终在源向量的已排序副本上运行它.

而BTW,手动天真的方式并不是非常复杂.给定两个源向量s1s2目标向量dest,您可以编写如下所示的内容:

for (std::vector<char>::iterator i = s1.begin(); i != s1.end(); ++i)
{
    if (std::find(s2.begin(), s2.end(), *i) != s2.end())
    {
        dest.push_back(*i);
    }
}
Run Code Online (Sandbox Code Playgroud)

find根据您选择的数据结构,您可以选择很多步骤.


Bil*_*l K 5

如果我必须对两个未排序的向量执行此操作(没有库帮助),我想我会将一个向量的所有元素添加到哈希表中,然后迭代第二个查找每个向量——应该比首先对两个列表进行排序更有效出色地。