STL常用操作:map

1.初始化

map<string, int> map1; map1[string("abc")] = 1; map1["def"] = 2;//创建空map,再赋值
map<string, int> map2(map1);    //拷贝构造
map<string, int> map3(map1.find("abc"), map1.end());    //迭代器构造
map<string, int> map4(move(map2));    //移动构造
map<string, int> map5 {{"this", 100},{"can", 100},};//使用initializer_list初始化
map<string, int, greater<string>> map6;//创建一个key逆序排列的map

2.常用操作

map1.at("abc");	//查找具有指定key的元素,返回value
map1.find("abc");    //查找键为key的元素,找到返回迭代器,失败返回end()
map1.count("abc");    //返回指定key出现的次数,0或1
map1.emplace(make_pair("str1", 1));//使用pair的转换移动构造函数,返回pair<map<string, int>::iterator, bool>
map1.emplace("str2", 2);    //使用pair的模板构造函数,如果key已经存在则什么都不做
map1.insert(pair<string ,int>("sex", 1));    //插入元素,返回pair<map<string, int>::iterator, bool>
map1.insert(map<string, int>::value_type("sex", 1));//插入元素,如果key已经存在则什么都不做
map1.insert(make_pair("sex", 1));//插入元素,返回pair<map<string, int>::iterator, bool>,插入成功second为true,失败为flase
map1.insert({"sex", 1});    //使用initializer_list插入元素
map1.insert(map1.end(), {"sex", 1});//指定插入位置,如果位置正确会减少插入时间
map1.insert(map2.begin(), map2.end());//使用范围迭代器插入
map1.erase("abc");	    //删除操作,成功返回1,失败返回0
map1.erase(map1.find("abc"));	    //删除操作,成功返回下一个pair的迭代器
map1.erase(map1.begin(), map1.end());    //删除map1的所有元素,返回指向end迭代器
map1.empty();        //是否为空
map1.size();        //大小
map<string, int>::iterator it = map1.begin();	    //返回指向map1首元素的迭代器
map<string, int>::const_iterator c_it = map1.cbegin();	    //返回指向map1首元素的常量迭代器
map<string, int>::reverse_iterator r_it = map1.rbegin();	    //返回一个逆序迭代器
map<string, int>::const_reverse_iterator cr_it = map1.crbegin();	    //返回一个逆序迭代器
map<string,int>::iterator it = map1.lower_bound("abc");    //返回键值大于等于给定元素的第一个元素
map<string,int>::iterator it = map1.upper_bound("abc");    //返回键值大于给定元素的第一个元素
pair<map<string, int>::iterator, map<string, int>::iterator> it = map1.equal_range("b");//返回一个pair,pair里面第一个变量是lower_bound返回的迭代器,第二个迭代器是upper_bound返回的迭代器
map1.clear();        //清空

3.不常用操作

map1.emplace_hint(map1.end(),"abc",12);//提示插入的位置,如果指定的位置是真正要插入的位置,会减少插入时间
map1.try_emplace("abc",12);//如果abc键不存在则插入,如果存在则什么都不做,C++17支持
map1.insert_or_assign("sex", 1);    //如果key不存在则插入,如果存在则赋值,C++17支持
map1.swap(map2);    //交换,要求两个map的类型相同
map1.get_allocator();    //返回分配器
map1.max_size();          //返回可以容纳的最大元素个数
auto nh = map1.extract("sex"); nh.key() = "gender"; map1.insert(move(nh));//改变key,而不改变对应的值,nh是结点把柄
map<string,int>::key_compare cmp = map1.key_comp();//返回map1比较key大小的函数,接收两个key作为参数,比较key的大小,<则返回true
map<string,int>::value_compare cmp = map1.value_comp();//返回比较pair中key大小的函数,接收两个pair作为参数
map1.merge(map2);    //合并两个map,C++17支持

4.遍历

  • 迭代器
for(map<string, int>::iterator it = map1.begin(); it != map1.end(); it++) {
    cout << it->first << "\t" << it->second << endl;
}
  • C11
for(auto m : map1) {
    cout << m.first << ", " << m.second << '\n';
}

5.算法

发布了36 篇原创文章 · 获赞 6 · 访问量 6987

猜你喜欢

转载自blog.csdn.net/zhuikefeng/article/details/104713861