3

我有 typedef 的两张地图

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来跟踪地图的插入顺序,同时保持地图的关键查找功能。

4

2 回答 2

4

我想您已经排除了包装对象,但它仍然是一个有效的解决方案。

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));
    }
    //...
};
于 2013-05-29T19:41:56.353 回答
0

boost::multi_index 可能是这里的正确答案。

一个跟踪插入顺序的 std::map ?

http://www.boost.org/libs/multi_index

于 2013-05-29T19:30:32.720 回答