我使用的是以下版本,无法使用C ++ 11 g ++(SUSE Linux)4.3.4 [gcc-4_3-branch revision 152973]。
我有一对配对。
std::vector<std::pair<int, std::string> > vec;
vec.push_back(std::make_pair(5, std::string("tata")));
vec.push_back(std::make_pair(6, std::string("tat2")));
vec.push_back(std::make_pair(7, std::string("tat3")));
vec.push_back(std::make_pair(8, std::string("tat4")));
现在我可以使用迭代器使用对中的键来搜索向量中的所有元素,例如
std::vector<std::pair<int, std::string> >:: iterator it ;
for (it = vec.begin(); it != vec.end(); ++it)
{
if (it->first == item)
{
cout << "Found " << item << "\n";
return 0;
}
}
我希望有任何可能的方法在C ++ 98中使用std :: find操作,因为我搜索过相关帖子,其中大部分都解决了C ++ 11支持的问题。
答案 0 :(得分:4)
C ++ 11只是使代码更简洁。在C ++ 11中,我们可能会写:
std::find_if(vec.begin(), vec.end(), [&](std::pair<int, std::string> const & ref) {
return ref.first == item;
});
现在,在C ++ 98中,lambda将会更加冗长:
class SearchFunction {
public:
SearchFunction(int item): item_(item) {}
bool operator()(std::pair<int, std::string> const & ref) {
return ref.first == item_;
}
private:
int item_;
};
std::find_if(vec.begin(), vec.end(), SearchFunction(item));
SearchFunction
等类通常被称为Functors。