例如,我已经定义了类foo和向量vec:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class foo {
public:
foo(int flag, char ch):flag(flag), ch(ch) {}
int flag;
char ch;
};
int main(void)
{
vector<foo> vec;
vec.push_back(foo(1,'a'));
vec.push_back(foo(2,'b'));
vec.push_back(foo(3,'c'));
//blabla...
}
Run Code Online (Sandbox Code Playgroud)
我已经找到了如何找到单个元素:如何在std :: vector中找到一个项目?
但现在我想通过给一个字符来找到一个对象,比如'b'.如何有效实现这一目标?
你可以使用std::find_if这个:
//c++14
std::find_if(std::begin(vec),std::end(vec),
[](auto&& v) { return v.ch == 'b'; })
//c++11
std::find_if(std::begin(vec),std::end(vec),
[](const foo& v) { return v.ch == 'b'; })
Run Code Online (Sandbox Code Playgroud)
如果您发现自己需要多次使用此模式,则可以将其包装在函数中:
//c++14, c++11 version left as exercise
decltype(auto) find_foo (const std::vector<foo>& vec, char c)
{
return std::find_if(std::begin(vec),std::end(vec),
[c](auto&& v) { return v.ch == c; });
}
Run Code Online (Sandbox Code Playgroud)
更好的选择可能是使用a std::unordered_map<char,int>而不是std::vector<foo>:
int main()
{
std::unordered_map<char,int> my_map;
my_map['a'] = 1;
my_map['b'] = 2;
my_map['c'] = 3;
cout << my_map['b']; //instead of that std::find_if nonsense
}
Run Code Online (Sandbox Code Playgroud)