给出两个范围,返回一个ForwardIterator, 查找成功指向第一个范围内第一次出现子序列 (第二个范围)的位置,查找失败指向last1。重载版本使用自定义的比较操作。
std::vector<int> vec = { 1,2,3,4,5,4,4,4,4,2,3 };
std::vector<int> vec2 = {4,4,4};
auto findator = std::search(vec.begin(),vec.end(),vec2.begin(),vec2.end());
if (findator != vec.end())
{
std::cout << "findator = " << *findator << std::endl;
}
else {
std::cout << "not found!!" << std::endl;
}
重载search()中第五个参数使用匿名函数:
std::vector<int> vec = { 1,2,3,4,5,4,4,4,4,2,3 };
std::vector<int> vec2 = {4,4,4};
auto findator = std::search(vec.begin(), vec.end(), vec2.begin(), vec2.end(), [](int a, int b) {return a == b; });
if (findator != vec.end())
{
std::cout << "findator = " << *findator << std::endl;
}
else {
std::cout << "not found!!" << std::endl;
}
无序关联式容器使用search函数(原版search并没有比较关联式容器的比较函数,所以只能使用重载search):
std::unordered_map<int, int>um = { {1,2},{2,3},{3,4},{4,5},{5,6} };
std::unordered_map<int, int>um2 = { {3,4},{4,5} };
auto findator = std::search(um.begin(), um.end(), um2.begin(), um2.end(), [](std::pair<int, int> a, std::pair<int, int> b) { return a.second == b.second; });
if (findator != um.end())
{
std::cout << "findator =" << (*findator).second << std::endl;
}
else {
std::cout << "not found!" << std::endl;
}