如果不允许对向量进行排序,则可以使用以下方法,如下面的演示程序所示。
#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;
}