unordered_map<int,bool> umap;
1. 特性
1.1 unordered_map 使用hash表存储,内部无序;
1.2 每个键都是唯一的,如果添加一个已有的键,则添加无效;
2. 常用操作
1. iterator 配合begin()、end()不多说;
2. insert插入元素(四种方法)
3.1 umap.insert({1,true}); //数组插入
3.2 umap[2] = 0; //键值插入
3.3 umap.insert(umap2.begin(),umap2.end()); //插入另一个哈希表中的元素
3.4 umap.insert(pair<int,bool>(0,true)); //pair插入
3. find(key) 方法:
2.1 如果找到key键,返回该迭代器;
2.2 如果找不到,返回末尾end();
所以 if(umap.find(key) == umap.end() 表示 如果umap中没有key键。
4. 删除元素
/*按键删除
当参数是key时,返回一个整数,该整数是移除元素的个数(即最大为1);
若找不到该键,则返回0 。*/
4.1 umap.erase(1);
/*迭代器单个删除
删除该迭代器iterator对应的键和值
*/
4.2 umap.erase( iterator );
/*迭代器范围删除
删除两个迭代器iterator1 ~ iterator2 之间的所有键和值
*/
4.3 umap.erase(iterator1 , iterator2);
//清空整个umap
4.4 umap.clear();
tips:
如果用[] 访问umap中不存在的某key值,umap会自动插入进去<key,value>(如果value是string类型,则value默认为空串,如果为int或bool类型,则value默认为0)。
示例:
#include<iostream>
#include<unordered_map>
using namespace std;
int main(){
unordered_map<int, bool> umap;
unordered_map<int, bool> umap2;
umap.insert({ 1,true }); //数组插入
umap2[2] = false; //键值插入
umap.insert(umap2.begin(), umap2.end()); //另一个map之间转移插入
umap.insert(pair<int,bool>(3,true)); //pair插入
for (auto um : umap)
cout << um.first << " " << um.second << endl;
if (umap.find(2) == umap.end()) //如果没找到以“2”为键的键值对
cout << "没找到以“2”为键的键值对!" << endl;
else {
auto it = umap.find(2); //如果找到,把迭代器赋给it
cout << "找到以“2”为键的键值对!且其value="<<it->second<<endl;
}
auto begin = umap.begin();
++begin;
umap.erase(begin, umap.end()); //迭代器范围删除
for(auto um : umap)
cout << um.first << " " << um.second << endl;
return 0;
}
输出:
1 1
2 0
3 1
找到以“2”为键的键值对!且其value=0
1 1