网站建设与管理工作内容,网站开发及维护合同范本,邯郸网站开发,阿里云部署网站1、概念 key 键值的类型。unordered_map中的每个元素都是由其键值唯一标识的。
T 映射值的类型。unordered_map中的每个元素都用来存储一些数据作为其映射值。
Hash 一种一元函数对象类型#xff0c;它接受一个key类型的对象作为参数#xff0c;并根据该对象返回size_t类型…
1、概念 key 键值的类型。unordered_map中的每个元素都是由其键值唯一标识的。
T 映射值的类型。unordered_map中的每个元素都用来存储一些数据作为其映射值。
Hash 一种一元函数对象类型它接受一个key类型的对象作为参数并根据该对象返回size_t类型的唯一值。这可以是一个实现函数调用操作符的类也可以是一个指向函数的指针(参见构造函数)。默认为hashKey。
Pred 接受两个键类型参数并返回bool类型的二进制谓词。表达式pred (a, b), pred是这种类型的一个对象,a和b是键值,返回true,如果是应考虑相当于b。这可以是一个类实现一个函数调用操作符或指向函数的指针(见构造函数为例)。这默认为equal_toKey它返回与应用相等操作符(ab)相同的结果。
Allloc 用于定义存储分配模型的allocator对象的类型。默认情况下使用allocator类模板它定义了最简单的内存分配模型并且与值无关。 unordered_map是存储key, value键值对的关联式容器其允许通过keys快速的索引到与 其对应的value。在unordered_map中键值通常用于唯一的标识元素键值是唯一的而映射值是一个对象其内容与此键关联。键和映射值的类型可能不同。 在内部,unordered_map没有对kye, value按照任何特定的顺序排序, 为了能在常数范围内 找到key所对应的valueunordered_map将相同哈希值的键值对放在相同的桶中。 unordered_map容器通过key访问单个元素要比map快但它通常在遍历元素子集的范围迭 代方面效率较低。 unordered_maps实现了直接访问操作符(operator[])它允许使用key作为参数直接访问 value。 2、构造函数
1创建空的unordered_map unordered_mapint, int m;
2使用初始化列表初始化 unordered_mapint, int m1({ { 1,1 } });unordered_mapint, int m2({{ 1,1 },{ 2,2 },{ 3,3 }});
3拷贝构造函数初始化 unordered_mapint, int m3(m2);4迭代器初始化 unordered_mapint, int m4(m2.begin(),m2.end());3、内置函数
3.1、容量
1判空返回bool值 unordered_mapint, int m;cout m.empty();
2求大小 unordered_mapint, int m;m.size(); 3返回无序映射容器可以容纳的最大元素数。 unordered_mapint, int m;cout m.max_size(); 3.2、迭代器 unordered_mapint, int v;v.begin(); //获取第一个数的位置v.end(); //获取最后一个数的位置unordered_mapint, string m;m.emplace(make_pair(1, yi));m.emplace(make_pair(2, er));unordered_mapint, string::iterator it m.begin();while (it ! m.end()){cout (*it).first (*it).second endl;it;}
3.3、元素访问 unordered_mapstring, string mymap;mymap[Bakery] Barbara; mymap[Seafood] Lisa; mymap[Produce] John; string name mymap[Bakery]; mymap[Seafood] name;mymap[Bakery] mymap[Produce];name mymap[Deli]; mymap[Produce] mymap[Gifts]; 3.4、修改器
1emplace插入 unordered_mapint, string m;m.emplace(make_pair(1, yi));m.emplace(make_pair(2, er)); 2insert插入
使用和emplace类似但是更加灵活 #include iostream
#include string
#include unordered_map
using namespace std;int main()
{unordered_mapstring, doublemyrecipe,mypantry { {milk,2.0},{flour,1.5} };pairstring, double myshopping(baking powder, 0.3);myrecipe.insert(myshopping); // copy insertionmyrecipe.insert(make_pairstring, double(eggs, 6.0)); // move insertionmyrecipe.insert(mypantry.begin(), mypantry.end()); // range insertionmyrecipe.insert({ {sugar,0.8},{salt,0.1} }); // initializer list insertionreturn 0;
}
3erase删除 #include iostream
#include string
#include unordered_map
using namespace std;int main()
{unordered_mapstring, string mymap;// populating container:mymap[U.S.] Washington;mymap[U.K.] London;mymap[France] Paris;mymap[Russia] Moscow;mymap[China] Beijing;mymap[Germany] Berlin;mymap[Japan] Tokyo;// erase examples:mymap.erase(mymap.begin()); // erasing by iteratormymap.erase(France); // erasing by keymymap.erase(mymap.find(China), mymap.end()); // erasing by rangereturn 0;
}
4clear清空 5swap 交换 3.5、查找
1find返回迭代器 unordered_mapint, string m;m.emplace(make_pair(1, yi));m.emplace(make_pair(2, er));unordered_mapint, string::iterator it m.find(2);while (it ! m.end()){cout (*it).first (*it).second endl;it;}
2count计数 一般在unordered_map中用不到因为unordered_map中key的值是唯一的
一般在unordered_multimap中用的较多
4、unordered_map的遍历(迭代)
4.1、迭代器
unordered_mapint, string::iterator it m.begin();while (it ! m.end()){cout (*it).first (*it).second endl;it;}
4.2、范围for for (auto e : m){cout e.first e.second endl;}
总结 unordered_map中的的元素是键值对unordered_map中的key是唯一的并且不能修改unordered_map遍历是一个无需的数列unordered_map的底层为哈希结构支持[ ]操作符operator[ ]中实际进行插入查找