在C++中,如何通过给出对​​象的成员来查找对象向量中的某些项?

0 c++ vector object

例如,我已经定义了类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'.如何有效实现这一目标?

Tar*_*ama 6

你可以使用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)