map
オブジェクトのベクトルを格納する を含むクラスがありshared_ptr
ます。
#include <map>
#include <memory>
#include <vector>
template <class T, class U>
class MyMap {
public:
typedef std::shared_ptr<U> UPtr;
typedef std::vector<UPtr> UPtrVec;
typedef std::map<T, UPtrVec> VecMap;
...
private:
VecMap vec_map;
};
マップされた各ベクトル値内の値に対して (ブーストを使用して) イテレータを作成することは可能ですか? また、指定されたキーのリストに対して格納された値を反復処理できるようにしたいと考えています。
たとえば、マップに次のようなデータが含まれているとします (簡潔にするために Python 構文に切り替えます)。
// note: in actuality the vector contents are shared_ptr's to objects
vec_map[5] = ["one", "two", "three"]
vec_map[8] = ["four", "five"]
vec_map[3] = ["six", "seven", "eight", "nine"]
次のことができるようにイテレータ インターフェイスを作成することは可能ですか。
MyMap<int, std::string> mymap
...
for(auto it = mymap.begin(), it != mymap.end(); ++it)
cout << *it << " ";
そして、「1 2 3 4 5 6 7 8 9」を出力しましたか?それを機能させることができれば、キー値に基づいてフィルター処理するイテレーターを書きたいと思います。
すべてのオブジェクトをフラットリストにUPtrVec
格納するクラスで別のものを作成することを考えていたことを除いて。しかし、キー情報をオブジェクトUPtr
に埋め込まない限り、キー値に基づいてフィルタリングできるマッピングを失います。U