比较 2 个向量并从第 2 个向量中删除第 1 个中找不到的元素 - c++ [关闭]

Posted

技术标签:

【中文标题】比较 2 个向量并从第 2 个向量中删除第 1 个中找不到的元素 - c++ [关闭]【英文标题】:Comparing 2 vectors and removing elements from 2nd vector that are not found in the 1st - c++ [closed] 【发布时间】:2020-01-27 22:52:31 【问题描述】:

我有 2 个字符串向量:

vector < string > animals = "cat", "dog", "pig", "tiger", "monkey", "lion"
vector < string > someAnimals = "dog", "mouse", "snake", "monkey", "cat"

如何比较这 2 个向量并删除 someAnimals 向量(“mouse”和“snake”)中未在动物向量中找到的元素?

【问题讨论】:

可能是:***.com/questions/14175858/c-subtract-vectors 如果我明白你想要什么,我认为你应该阅读this post。 这能回答你的问题吗? C++: subtract vectors 示例代码here. 请展示您到目前为止已经编写的工作,并解释您的程序究竟是如何不工作或没有产生预期的结果。您必须首先展示您的工作,并且在通过 ***.com 寻求帮助之前,它必须是真诚地真正尝试实现您的任务,而不是几行象征性的代码。有关更多信息,请参阅How to Ask 问题,获取tour,并阅读help center。 【参考方案1】:

如果不允许对向量进行排序,则可以使用以下方法,如下面的演示程序所示。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main() 

    std::vector <std::string> animals = 
    
        "cat", "dog", "pig", "tiger", "monkey", "lion"
    ;

    std::vector <std::string> someAnimals = 
    
        "dog", "mouse", "snake", "monkey", "cat"
    ;

    auto not_present = [&animals]( const auto &s )
    
        return 
        std::find( std::begin( animals ), std::end( animals ), s ) == std::end( animals );
    ;

    someAnimals.erase( std::remove_if( std::begin( someAnimals ),
                                       std::end( someAnimals ),
                                       not_present ), std::end( someAnimals ) );

    for ( const auto &s : someAnimals )
    
        std::cout << s << ' ';
    
    std::cout << '\n';

    return 0;

程序输出是

dog monkey cat 

否则,您可以将std::binary_search 用于排序向量,如下所示。

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>

int main() 

    std::vector <std::string> animals = 
    
        "cat", "dog", "pig", "tiger", "monkey", "lion"
    ;

    std::vector <std::string> someAnimals = 
    
        "dog", "mouse", "snake", "monkey", "cat"
    ;

    std::sort( std::begin( animals ), std::end( animals ) );
    std::sort( std::begin( someAnimals ), std::end( someAnimals ) );

    auto not_present = [&animals]( const auto &s )
    
        return 
        not std::binary_search( std::begin( animals ), std::end( animals ), s );
    ;

    someAnimals.erase( std::remove_if( std::begin( someAnimals ),
                                       std::end( someAnimals ),
                                       not_present ), std::end( someAnimals ) );

    for ( const auto &s : someAnimals )
    
        std::cout << s << ' ';
    
    std::cout << '\n';

    return 0;

【讨论】:

以上是关于比较 2 个向量并从第 2 个向量中删除第 1 个中找不到的元素 - c++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

删除字符串向量中前 2 个字符的重复项

对向量元素进行排序[关闭]

如何比较 2 个向量并根据比较创建单独的向量

将MFCC特征向量与DTW进行比较

Access VBA:比较两个列表框

计算连续子向量的最大和