現在のプロジェクトでは、次のタイプのセットがあります。
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;
ライブラリと呼ばれるクラスに含まれるすべてのセットです。これらの各セットには、ItemPtr のインスタンスが含まれており、ItemPtr の各インスタンスには、Book、Movie、または MusicAlbum のインスタンスへのポインターが含まれています。これらはそれぞれ、Item というクラスから派生したクラスです。Book のインスタンスには、著者、タイトル、ページ数、およびその本に共通する一連のキーワードが含まれます。私はそのような機能を持っています:
const ItemSet* Library::itemsForKeyword(const string& keyword)
{
return NULL; //need to put code in here
}
キーワードのリストにパラメーターを持つ各セットからすべてのアイテムを返す必要があります。各セットを反復処理してそのキーワードにアクセスし、それらを上記の関数のパラメーターと比較する方法がわかりません。どうすればそのような比較を行うことができますか?
ここに私の Item クラスがあります:
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 を参照すると、keywordsList にアクセスできることはわかっていますが、その時点から、リストを調べて、渡されたキーワードと比較する方法がわかりません。私の計画は、比較して一致を見つけた後、インスタンスを一時的に保存し、そのキーワードを含むすべてのアイテムとともに一時を返すことです。これまでご協力いただきありがとうございました。