我有2个字符串向量:
vector < string > animals = {"cat", "dog", "pig", "tiger", "monkey", "lion"}
vector < string > someAnimals = {"dog", "mouse", "snake", "monkey", "cat"}
如何比较这两个向量,并删除一些在动物向量中找不到的动物矢量(“鼠标”和“蛇”)中的元素?
答案 0 :(得分:0)
如果不允许对向量进行排序,则可以使用下面的演示程序中所示的以下方法。
#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;
}