用insert运算符填充嵌套的std::map
我有以下代码:用insert运算符填充嵌套的std::map,map,insert,nested,Map,Insert,Nested,我有以下代码: #include <iostream> #include <utility> #include <map> using namespace std; int main() { map<int, map<string, int> > mapa; // way A mapa[10]["aaa"] = 20; // way B -> Compilation Error pair<int, pair<s
#include <iostream>
#include <utility>
#include <map>
using namespace std;
int main()
{
map<int, map<string, int> > mapa;
// way A
mapa[10]["aaa"] = 20;
// way B -> Compilation Error
pair<int, pair<string, int> > par(10, make_pair("aaa", 20));
mapa.insert(par);
return 0;
}
我知道填充地图的方法是有效的。
我想使用方式B,但它会引发编译错误:
错误:调用“std::map,int>::mapconst std::pair,int>&”时没有匹配函数
如何使用insert运算符填充嵌套贴图
Pd:我不使用[]运算符,因为它需要定义默认构造函数,因为我使用的是Boost中的time\u period对象,所以我没有该构造函数。您的映射类型是map of int->map of string->int,但您正在尝试插入map of int->pair string,int类型的条目。一对不是映射,因此出现错误 编辑: 根据,对map的[]操作符的调用相当于一系列其他操作: 映射的类型和运算符[]常量键类型和k 对该函数的调用相当于: *此->插入make\u pairk,映射\u type.first.second 在你的例子中,调用mapa[10][aaa]=20;相当于:
(*(( (*((mapa.insert(make_pair(10,map<string, int>()))).first)).second
.insert(make_pair("aaa",20))).first)).second
但我相信,如果存在键10或aaa,则不会在地图中插入任何元素。我建议您仔细阅读文档并测试预期行为。是的,您是对的。我理解什么是编译错误。我想知道的是,我如何做一些类似于A的事情,但是使用insert操作符而不是[]操作符。它实际上有点复杂,因为键可能存在。如果存在,则该值(即映射)存在,您必须对其进行更新。如果没有,则必须创建地图。