unordered_map的介绍及使用

1、unordered_map的介绍

1、unordered_map是存储<key, value>键值对的关联式容器,其允许通过key快速的索引到与其对应的value
2、unordered_map中,键值通常用于惟一的标识元素,而映射值是一个对象,其内容与此键关联,键和映射的类型可以不同
3、在内部,unordered_map没有对<key, value>进行排序,unordered_map将相同哈希值的键值对放在对应的桶中
4、unordered_map容器通过key访问单个元素比map快,但它遍历元素子集的范围和迭代方面效率较低
5、unordered_map实现了直接访问操作符(operator[])允许通过key作为参数访问value
6、unordered_map的迭代器至少是前向迭代器

2、unordered_map的构造

函数声明功能介绍
explicit unordered_map ( size_type n = /* see below */,const hasher& hf = hasher(),const key_equal& eql = key_equal(),const allocator_type& alloc = allocator_type() );构造一个空的unordered_map
explicit unordered_map ( const allocator_type& alloc );构造一个空的unordered_map
template unordered_map ( InputIterator first, InputIterator last,size_type n = /* see below */,const hasher& hf = hasher(),const key_equal& eql = key_equal(),const allocator_type& alloc = allocator_type() );用[first,last)区间中的元素构造unordered_map
unordered_map ( const unordered_map& ump );unordered_map的拷贝构造
unordered_map ( const unordered_map& ump, const allocator_type& alloc );unordered_map的拷贝构造
unordered_map ( unordered_map&& ump );将ump移动到另外一个unordered_map中
unordered_map ( unordered_map&& ump, const allocator_type& alloc );将ump移动到另外一个unordered_map中
unordered_map ( initializer_list<value_type> il,size_type n = /* see below */,const hasher& hf = hasher(),const key_equal& eql = key_equal(),const allocator_type& alloc = allocator_type() );将initializer_list移动到unordered_map中

3、unordered_map的迭代器

函数声明功能介绍
begin返回unordered_map第一个元素的迭代器
end返回unordered_map最后一个元素下一个位置的迭代器
cbegin返回unordered_map第一个元素的const迭代器
cend返回unordered_map最后一个元素下一个位置的const迭代器

4、unordered_map的操作

函数声明功能介绍
bool empty() const检测unordered_map是否为空
size_t size() const获取unordered_map的有效元素个数
operator[]返回与key对应的value,没有一个默认值
iterator find(const K& key)返回key在哈希桶中的位置
size_t count(const K& key)返回哈希桶中关键码为key的键值对的个数
insert向容器中插入键值对
erase删除容器中的键值对
void clear()清空容器中有效元素个数
void swap(unordered_map&)交换两个容器中的元素
size_t bucket_count()const返回哈希桶中桶的总个数
size_t bucket_size(size_t n)const返回n号桶中有效元素的总个数
size_t bucket(const K& key)返回元素key所在的桶号

5、unordered_map的使用

#include <iostream>
using namespace std;
#include <unordered_map>

int main()
{
	unordered_map<string, double>
		myrecipe,
		mypantry = { { "milk", 2.0 }, { "flour", 1.5 } };

	pair<string, double> myshopping("baking powder", 0.3);

	myrecipe.insert(myshopping);                        // copy insertion
	myrecipe.insert(pair<string, double>("eggs", 6.0)); // move insertion
	myrecipe.insert(mypantry.begin(), mypantry.end());  // range insertion
	myrecipe.insert({ { "sugar", 0.8 }, { "salt", 0.1 } });    // initializer list insertion

	unordered_map<std::string, std::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 iterator
	mymap.erase("France");             // erasing by key
	mymap.erase(mymap.find("China"), mymap.end()); // erasing by range

	//capacity examples:
	cout << mymap.size() << endl;
	cout << mymap.empty() << endl;

	mymap.clear();
	cout << mymap.size() << endl;
	cout << mymap.empty() << endl;

	system("pause");
	return 0;
}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐