我有typedef'd两张地图
typedef std::map<std::string, std::map<std::string, migrationObj> > table;
typedef std::map<std::string, migrationObj> obj;
int main (int argc, char ** argv) {
table t;
t["test"].insert(obj::value_type("testID", 1));
return 0;
}
我如何能够添加自定义方法来键入table
(让我们称之为createItem),这样我才能做到
t["test"].createItem("testID", 1);
我知道这样做有点开销,但我已经简化了问题。我这样做的原因是我仍然需要在createItem
中做一些事情来跟踪地图的插入顺序,同时保持地图的键查找功能。
答案 0 :(得分:3)
我想你已经排除了一个包装器对象,但它仍然是一个有效的解决方案。
class obj {
typedef std::map<std::string, migrationObj> maptype;
maptype m_;
public:
maptype * operator -> () { return &m_; }
const maptype * operator -> () const { return &m_; }
maptype & map () { return m_; }
const maptype & map () const { return m_; }
void createItem (std::string key, int value) {
// ... your custom code ...
m_.insert(maptype::value_type(key, value));
}
//...
};
答案 1 :(得分:0)
boost :: multi_index可能是正确答案。