STL常用操作:unordered_map

1.初始化

unordered_map<string, int> map1; map1[string("abc")] = 1; map1["def"] = 2;//創建空map,再賦值
unordered_map<string, int> map2(map1);    //拷貝構造
unordered_map<string, int> map3(map1.find("abc"), map1.end());    //迭代器構造
unordered_map<string, int> map4(move(map2));    //移動構造
unordered_map<string, int> map5 {{"this", 100},{"can", 100},};//使用initializer_list初始化

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<unordered_map<string, int>::iterator, bool>
map1.emplace("str2", 2);    //使用pair的模板構造函數,如果key已經存在則什麼都不做
map1.insert(pair<string ,int>("sex", 1));//插入元素,返回pair<unordered_map<string, int>::iterator, bool>
map1.insert(unordered_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();        //大小
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_map<string, int>::iterator it = map1.begin();	    //返回指向map1首元素的迭代器
unordered_map<string, int>::const_iterator c_it = map1.cbegin();	    //返回指向map1首元素的常量迭代器
unordered_map<string, int>::local_iterator it = map1.begin(1);//返回1號桶中的首元素迭代器
unordered_map<string, int>::const_local_iterator c_it = map1.cbegin(1);//返回1號桶中的首元素的常量迭代器
pair<unordered_map<string, int>::iterator, unordered_map<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.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();          //返回可以容納的最大元素個數
map1.max_bucket_count();    //返回可以容納的最大桶數
unordered_map<string, int>::hasher hash = map1.hash_function();//返回hash函數
unordered_map<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);    //合併兩個map,C++17支持

4.遍歷

  • 迭代器
for(unordered_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.算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章