C++ 向typedef添加函数

C++ 向typedef添加函数,c++,function,map,typedef,C++,Function,Map,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));

我有两张地图

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;
}

我知道这看起来有点开销,但我已经简化了问题。我这样做的原因是我仍然需要在
createItem
中做一些事情来跟踪映射的插入顺序,同时保持映射的键查找功能。

boost::multi_index可能是正确的答案


boost::multi_索引可能是这里的正确答案


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

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));
    }
    //...
};
类obj{
typedef std::map maptype;
映射类型m_3;;
公众:
maptype*运算符->(){return&m;}
常量映射类型*运算符->()常量{return&m}
maptype&map(){return m}
常量maptype&map()常量{return m}
void createItem(标准::字符串键,int值){
//…您的自定义代码。。。
插入(映射类型::值类型(键,值));
}
//...
};

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

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));
    }
    //...
};
类obj{
typedef std::map maptype;
映射类型m_3;;
公众:
maptype*运算符->(){return&m;}
常量映射类型*运算符->()常量{return&m}
maptype&map(){return m}
常量maptype&map()常量{return m}
void createItem(标准::字符串键,int值){
//…您的自定义代码。。。
插入(映射类型::值类型(键,值));
}
//...
};

离题了,但我希望我的衬衫上写着“我得到了typedef'd”。。谢谢你的主意!可能是与主题无关的重复,但我希望我的衬衫上写着“我得到了typedef'd”。。谢谢你的主意!我知道这可能是重复的,我想实现的是,但是会有很多对象的创建(大数据分析),因此每次我都需要这样做。这就是为什么我想在typedef'd映射中添加一个自定义函数。仔细查看文档,boost::multi_index的插入性能可能比std::map更好<代码>从计算复杂性(即大O特征化)的角度来看,multi_index_容器及其相应的手动模拟是等效的:将元素插入multi_index_容器可简化为对每个索引的基本插入操作的简单组合,类似地,删除也是如此。我知道这一点,我想实现的是,但是会有很多对象的创建(大数据分析),因此每次我都需要这样做。这就是为什么我想在typedef'd映射中添加一个自定义函数。仔细查看文档,boost::multi_index的插入性能可能比std::map更好<代码>从计算复杂性(即大O特征化)的角度来看,multi_index_容器及其相应的手动模拟是等效的:将元素插入multi_index_容器可简化为对每个索引的基本插入操作的简单组合,同样,删除也是如此。有趣的是,在初始化对象和创建item@toxicate20:更新了答案。那一个实际上没有编译,不知道为什么。:没关系,是我(尽管我很愚蠢)。我的代码里有些东西让一切都爆炸了。谢谢有趣的是,当初始化一个对象并创建一个item@toxicate20:更新了答案。那一个实际上没有编译,不知道为什么。:没关系,是我(尽管我很愚蠢)。我的代码里有些东西让一切都爆炸了。谢谢