关于C++中关联容器map的初始化/赋值有好几种方式

 
1.直接赋值法

    map<string, int> m1;
    m1["def"] = 2;


 2.用insert添加

    map<string, int> m2;
    m2.insert({ "abc", 1 });    //使用这种就可以了
    //其他形式和方式
    m2.insert(make_pair(string("def"), 2));
    m2.insert(pair<string, int>(string("ghi"), 3));

3.列表初始化

    map<string,int> m3 = {
    {"string",1}, {"sec",2}, {"trd",3}
    };

    map<string,string> m4 = {
    {"first","second"}, {"third","fourth"},
    {"fifth","sixth"}, {"begin","end"}
    };

注:列表初始化适用于c++11和以上的版本,低于11的版本则无法使用

如果需要插入一个key并且不指定value,可以直接用下面这种写法,看起来不是一个表达式,不过map对“[]”进行了重载,本质上仍然是表达式,其含义是如果存在该变量则直接返回对应value,如果不存在则增加该key值并自动初始化为0

map<string,int> a;    //a是string到int的空map
a["new"];        //"new"是新增的key

不过需要注意的是,如果value类型为数型,即使像上面一样没有进行赋值操作,也一般会默认赋值为——0,

如果value是string或char类型,则默认为空,没有默认值,因此,string或char可以用列表初始化进行不给value赋值的添加key

string<string,string> m5 = {
    {"first",""}, {"second",""}
    {"third",""}, {"fourth",""}
};


 


多类型嵌套的map赋值

map的定义支持多层不同类型的嵌套,形如:

map<int, map<string, vector<double>>>  testmap;

这种多层嵌套的map,也是可以直接进行赋值操作的,如:

map<int, map<string, vector<double>>>  testmap;
testmap[3]["three"].push_back(3.75);

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐