我有一个类“类”,它有一个成员 std::list,我想在该列表/树中搜索一个项目,特别是一个具有特定名称的项目。我的班级的基本表示如下:
#include <list>
#include <string>
class Class {
std::string _name;
std::list<Class*> _members;
public:
Class(const std::string& name) : _name(name) {}
void addMember(Class* member) { _members.push_back(member); }
const std::string& name() const { return _name; }
const std::list members() const { return _members; }
Class* findItem(const std::string& name) const { ... }
};
我可以在 Class::findItem 中做这样的事情:
Class* Class::findItem(const std::string& n) const {
std::list<Class>::const_iteratior i;
for(i=_members.begin(); i!=_members.end(); ++i)
if((*i)->name() == n) return *i;
for(i=_members.begin(); i!=_members.end(); ++i) {
Class* cls = (*i)->findItem(n);
if(cls) return cls;
}
return 0;
}
但是,我想要发生的是 findItem() 将“最接近”的项目返回到搜索的项目。例如,如果这是我的树,每个字母代表列表层次结构中的一个级别,每个数字代表项目“值”。我希望 findItem(3) 返回 B(3),而不是 C(3)。
一个(1) | ---------------------------------- 乙(2)乙(3) | | --------------------- ----- C(3) C(4) C(4) | | ---------------- ---------- D(5) D(6) D(7) D(5) D(6)