【发布时间】:2009-04-20 16:26:55
【问题描述】:
有没有办法在对象容器中使用像 find() 和 find_if() 这样的 stl 算法? 例如:使用 find() 在 Alfhabetic 类的向量中查找名称为“abc”的元素。
【问题讨论】:
有没有办法在对象容器中使用像 find() 和 find_if() 这样的 stl 算法? 例如:使用 find() 在 Alfhabetic 类的向量中查找名称为“abc”的元素。
【问题讨论】:
您可以定义一个比较谓词(函子)。这是一个通用的实现:
struct AlphabeticNameComp
{
AlphabeticNameComp( const std::string& toCompare)
: toCompare_( toCompare) { }
bool operator()( const Alphabetic& obj) const
{
return toCompare_ == obj.name();
}
private:
const std::string toCompare_;
};
在字母元素的向量中
std::vector< Alphabetic> vect;
您可以运行如下搜索:
std::find_if( vect.begin(), vect.end(), AlphabeticNameComp( "abc"));
【讨论】:
您可以为类Alfhabetic 定义一个operator==(),它只匹配数据成员abc
类似的东西:
bool operator==(const Alfhabetic& a, const Alfhabetic& b)
{
return (a.abc == b.abc);
}
然后找到一个Alfhabetic 实例,该实例使用abc 作为您想要的值进行初始化。
【讨论】: