我需要按照以下数据结构来表示数据。数据需要表示嵌套在多图中的地图。
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));
}
您对改进上述版本有什么建议吗?
答案 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[]
)。