在我当前的项目中,我有以下类型的集合:
typedef set<ItemPtr> ItemSet;
其中 ItemPtr 是此类:
class ItemPtr
{
private:
Item *ptr;
public:
ItemPtr(Item *ptr) : ptr(ptr) { }
Item* getPtr() const { return ptr; }
};
以及以下套装:
ItemSet bookList;
ItemSet movieList;
ItemSet musicAlbumList;
它们都是包含在一个名为 Library 的类中的集合。这些集合中的每一个都包含 ItemPtr 的实例,其中 ItemPtr 的每个实例都包含一个指向 Book、Movie 或 MusicAlbum 实例的指针。这些中的每一个都是从名为 Item 的类派生的类。Book 的一个实例,包含作者、标题、页数和该书共有的一组关键字。我有这样的功能:
const ItemSet* Library::itemsForKeyword(const string& keyword)
{
return NULL; //need to put code in here
}
需要返回每个集合中在其关键字列表中具有参数的所有项目。我不确定如何遍历每个集合,并访问它的关键字,然后将它们与上述函数的参数进行比较。我怎么能做这样的比较?
这是我的项目类:
class Item
{
public:
string mTitle;
string mArtist;
Item(const string& title, const string& artist);
Item();
virtual ostream &print(std::ostream &os) const
{
os << "author: \t" << mArtist << endl;
os << "title: \t" << mTitle << endl;
return os;
}
virtual ~Item();
set<string> keywordsList;
void addKeywords(string keyword);
};
这是 addKeywords 函数:
void Item::addKeywords(string keyword)
{
keywordsList.insert(keyword);
}
到目前为止,这是我在编写我需要的函数时所获得的:
const ItemSet* Library::itemsForKeyword(const string& keyword)
{
ItemSet temp;
for(it=bookList.begin();it!=bookList.end();it++){
if(it->getPtr()->keywordsList)
}
return &temp;
}
我知道通过用我的迭代器引用 getPtr,它使我可以访问关键字列表,但从那时起,我不知道如何检查列表以将其与传入的关键字进行比较。我的计划是,在比较并找到匹配项之后,将实例存储在 temp 中,然后将 temp 与包含该关键字的所有项目一起传回。感谢您迄今为止的帮助。