我有一个包含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;
};
是否可以为每个映射向量值内的值创建一个迭代器(我想使用 boost)?我还希望能够迭代指定键列表的存储值。
例如,如果我的地图包含这样的数据(为简洁起见切换到 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 << " ";
并输出“一二三四五六七八九”?如果我能让它工作,我想编写一个基于键值过滤的迭代器。
除非我考虑UPtrVec
在类中创建另一个将所有UPtr
对象存储在一个平面列表中。但是我丢失了允许我根据键值进行过滤的映射,除非我将键信息嵌入到U
对象中。