如何将数据插入嵌套的multimap / map中?

时间:2014-09-18 22:51:29

标签: c++

我需要按照以下数据结构来表示数据。数据需要表示嵌套在多图中的地图。

std::multimap<int, std::map<int, double> > _model;

您能帮我一个关于如何将数据插入上述模型的示例吗?我没有使用C ++ 11。

例如,我正在插入示例数据,如下所示。但我认为以下不是一个好的解决方案。

        std::multimap<int, std::map<int, double> >::iterator it = _sample.find(10);
        if(it != _sample.end()) {
            std::map<int, double>& m = it->second;
            m.insert(std::pair<int, double>(10, 2.0));
        } else {
            std::map<int, double> m;
            m[10] = 20.0;

            _sample.insert(std::make_pair(10, m));
        }

您对改进上述版本有什么建议吗?

1 个答案:

答案 0 :(得分:0)

map operator[]搜索key如果不存在,插入并返回default constructed value,如果存在则返回密钥的值。< / p>

multimap这个不存在的运算符中,因为不知道与同一个键关联的可能的多个值会返回什么。

您也可以使用boost:assign

#include <map>
#include <boost/assign/std/map.hpp>

using namespace boost::assign;

int main() {
    // std version
    typedef std::map<int, double> internal_map_t;
    std::multimap<int, internal_map_t> _model;

    internal_map_t newelem;
    newelem[0] = 3.14;
    _model.insert(std::make_pair(25, newelem));

    // boost assign version
    internal_map_t newelem1;
    insert( newelem1 )( 1, 3.15 );
    insert( _model )( 26, newelem1 );        

    return 0;
}

一个问题:如果您要搜索元素并且是否存在向该元素添加数据,为什么要使用multimap而不是map(您可以将调用链接到operator[] )。