gpt4 book ai didi

c++ - 在 C++ 中,如何通过给定对象的成员来查找对象 vector 中的某些项?

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:53 25 4
gpt4 key购买 nike

例如,我定义了类foo和 vector 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...
}

我找到了如何找到单个元素:How to find an item in a 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'; })

如果您发现自己多次需要这种模式,您可以将其包装在一个函数中:

//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; });
}

更好的选择可能是使用 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
}

关于c++ - 在 C++ 中,如何通过给定对象的成员来查找对象 vector 中的某些项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com