1.初始化
unordered_multimap<string, int> map1;
unordered_multimap<string, int> map2(map1); //拷贝构造
unordered_multimap<string, int> map3(map1.find("abc"), map1.end()); //迭代器构造
unordered_multimap<string, int> map4(move(map2)); //移动构造
unordered_multimap<string, int> map5 {{"this", 100},{"can", 100},};//使用initializer_list初始化
2.常用操作
map1.find("abc"); //查找键为key的元素,找到返回迭代器,失败返回end()
map1.count("abc"); //返回指定key出现的次数,0或其他
map1.emplace(make_pair("str1", 1)); //使用pair的转换移动构造函数,返回被插入元素的迭代器
map1.emplace("str2", 2); //使用pair的模板构造函数
map1.insert(pair<string ,int>("sex", 1)); //插入元素,指定插入位置意义不大,因为map会自动排序,返回被插入元素的迭代器
map1.insert(unordered_multimap<string, int>::value_type("sex", 1));//插入元素
map1.insert(make_pair("sex", 1));//插入元素,返回插入元素的迭代器
map1.insert({"sex", 1}); //使用initializer_list插入元素
map1.insert(map1.end(), {"sex", 1});//指定插入位置,如果位置正确会减少插入时间
map1.insert(map2.begin(), map2.end());//使用范围迭代器插入
map1.erase("abc"); //删除操作,成功返回删除的个数,失败返回0
map1.erase(map1.find("abc")); //删除一个符合条件的pair,成功返回下一个pair的迭代器
map1.erase(map1.begin(), map1.end()); //删除map1的所有元素,返回指向end的迭代器
map1.empty(); //是否为空
map1.size(); //大小
map1.bucket_count(); //返回容器中的桶数
map1.bucket_size(1); //返回1号桶中的元素数
map1.bucket("abc"); //abc这个key在哪一个桶
map1.load_factor(); //负载因子,返回每个桶元素的平均数,即size/float(bucket_count);
map1.max_load_factor();//返回最大负载因子
map1.max_load_factor(2);//设置最大负载因子为2,rehash(0)表示强制rehash
map1.rehash(20);//设置桶的数量为20,并且重新rehash
map1.reserve(20);//将容器中的桶数设置为最适合元素个数,如果20大于当前的bucket_count乘max_load_factor,则增加容器的bucket_count并强制重新哈希。如果20小于该值,则该功能可能无效。
unordered_multimap<string, int>::iterator it = map1.begin(); //返回指向map1首元素的迭代器
unordered_multimap<string, int>::const_iterator c_it = map1.cbegin(); //返回指向map1首元素的常量迭代器
unordered_multimap<string, int>::local_iterator it = map1.begin(1);//返回1号桶中的首元素迭代器
unordered_multimap<string, int>::const_local_iterator c_it = map1.cbegin(1);//返回1号桶中的首元素的常量迭代器
pair<unordered_multimap<string, int>::iterator, unordered_multimap<string, int>::iterator> it = map1.equal_range("abc");//返回一个pair,pair里面第一个变量是lower_bound返回的迭代器,第二个迭代器是upper_bound返回的迭代器
map1.clear(); //清空
3.不常用操作
map1.emplace_hint(map1.end(),"abc",12);//提示插入的位置,如果指定的位置是真正要插入的位置,会减少插入时间
map1.swap(map2); //交换,要求两个map的类型相同
map1.get_allocator(); //返回分配器
map1.max_size(); //返回可以容纳的最大元素个数
map1.max_bucket_count(); //返回可以容纳的最大桶数
unordered_multimap<string, int>::hasher hash = map1.hash_function();//返回hash函数
unordered_multimap<string, int>::key_equal eql = map1.key_eq();///返回比较key是否相等的函数,接收两个string参数
auto nh = map1.extract("sex"); nh.key() = "gender"; map1.insert(move(nh));//改变key,而不改变对应的值,nh是结点把柄
map1.merge(map2); //合并两个unordered_multimap,C++17支持
4.遍历
for(unordered_multimap<string, int>::iterator it = map1.begin(); it != map1.end(); it++) {
cout << it->first << "\t" << it->second << endl;
}
for(auto m : map1) {
cout << m.first << ", " << m.second << '\n';
}
5.算法