背景
在C++的stl中,对包含pair结构的vector,进行多次搜索操作。
代码
代码中主要包括两个关键点:
- 因为vector中包含了pair结构,所以在搜索中要用find_if代替常规的find函数;
- 需要对vector经行多次查找操作,且需要查找的值会发生改变,所以要利用仿函数(functor)进行传值。
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
//int User = 200;
//bool isEqual(const std::pair<int, int>& element)
//{
// return element.second == User;
//}
// Functor
class isEqualALL {
public:
explicit isEqualALL(int UserVal) : User(UserVal) {}
bool operator() (const std::pair<int, int>& element) const {
return element.second == User;
}
private:
const int User;
};
int main(int argc, char *argv[])
{
vector<pair<int, int>> sortList;
sortList = {
pair<int, int>(1, 100),
pair<int, int>(2, 200),
pair<int, int>(3, 300),
pair<int, int>(4, 400),
};
cout << "初始值:" << endl;
for (auto &i : sortList) {
cout << i.first << ":" << i.second <<endl;
}
int myUser[] = {200, 400};
for (int i = 0; i < sizeof(myUser) / sizeof(int); i++) {
auto it = std::find_if( sortList.begin(), sortList.end(), isEqualALL(myUser[i]));
if (it != sortList.end()) {
sortList.erase(it);
}
cout <<"第" << i + 1 << "次删除后:///" << endl;
for (auto &i : sortList) {
cout << i.first << ":" << i.second <<endl;
}
}
return 0;
}
参考: