gpt4 book ai didi

c++ - 在结构 vector 中搜索

转载 作者:太空宇宙 更新时间:2023-11-04 16:15:46 26 4
gpt4 key购买 nike

我有一个充满结构的 vector ,如下所示

struct person_t
{

string name;
string id;
struct location_t location;
};

vector <person_t> myvector;

我已经阅读了 myvector 中的项目

但现在我需要知道如何在 vector 中搜索特定项目并计算该项目在 vector 中的数量。

最佳答案

unsigned int count = std::count_if( myvector.begin(), myvector.begin(),
[]( const person_t & p ) { return p.name == "Bill Gates"; }
);

或者没有c++11

struct EqualByName {
EqualByName( const std::string & name ) : m_name( name ) {}
bool operator()( const person_t & p ) const { return p.name == m_name; }
private:
std::string m_name;
};
unsigned int count = std::count_if( myvector.begin(), myvector.begin(),
EqualByName( "Bill Gates" )
);

或者看起来很丑但适用于所有场合 ))

template< class T, class FieldType, FieldType T::*FieldPtr >
struct EqualBy
{
EqualBy( const FieldType & value ) : m_fieldValue( value ) {}
bool operator()( const T & r ) const {
return m_fieldValue == r.*FieldPtr;
}
bool operator()( const T * p ) const {
return m_fieldValue == p->*FieldPtr;
}
private:
const FieldType m_fieldValue;
};

// usage:
typedef EqualBy< person_t, std::string, & person_t::name > EqualByName;
typedef EqualBy< person_t, std::string, & person_t::id > EqualById;
unsigned int namesCount = std::count_if( myvector.begin(), myvector.end(),
EqualByName( "Bill Gates" )
);
unsigned int idsCount = std::count_if( myvector.begin(), myvector.end(),
EqualById( "123456" )
);

关于c++ - 在结构 vector 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859245/

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