unordered_multimap的介绍及使用

1、unordered_multimap的介绍

1、无序容器是存储由键值和映射值组合而成的元素的关联容器,非常类似于unordered_map容器,但是允许不同的元素具有等价的键。
2、在unordered_数百万ap中,键值通常用于惟一地标识元素,而映射的值是一个对象,其中包含与该键相关联的内容。键和映射值的类型可能不同。
3、在内部, unordered_multimap中的元素没有在任何特定的顺序排序对关键或映射值, 但组织成桶取决于他们的散列值, 以便快速访问单个元素直接的键值(平均一个恒定的平均时间复杂度)。
4、具有等价键的元素被分组在同一个bucket中,并且迭代器(参见equal_range)可以遍历所有元素。
5、容器中的迭代器至少是前向迭代器。
6、注意这个容器不是在它自己的头文件中定义的,而是共享头文件 <unordered_map>。

2、unordered_multimap的构造

函数声明功能介绍
explicit unordered_multimap( size_type n = /* see below */, const hasher& hf = hasher(),const key_equal& eql = key_equal(), const allocator_type& alloc = allocator_type() );构造一个空的unordered_multimap
explicit unordered_multimap( const allocator_type& alloc );构造一个空的unordered_multimap
template unordered_multimap( 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_multimap
unordered_multimap( const unordered_map& ump );unordered_multimap的拷贝构造
unordered_multimap( const unordered_multimap& ump, const allocator_type& alloc );unordered_multimap的拷贝构造
unordered_multimap( unordered_multimap&& ump );将ump移动到另外一个unordered_multimap中
unordered_multimap ( unordered_multimap&& ump, const allocator_type& alloc );将ump移动到另外一个unordered_multimap中
unordered_multimap ( 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_multimap中

3、unordered_multimap的迭代器

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

4、unordered_multimap的操作

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

5、unordered_multimap的使用

#include <iostream>
#include <unordered_map>

using namespace std;

int main()
{
	unordered_multimap<std::string, int>
		first,
		second = { { "AAPL", 200 }, { "GOOG", 100 } };

	pair<std::string, int> mypair("MSFT", 500);

	first.insert(mypair);                            // copy insertion
	first.insert(make_pair("GOOG", 50)); // move insertion
	first.insert(second.begin(), second.end());  // range insertion
	first.insert({ { "ORCL", 100 }, { "GOOG", 100 } });    // initializer list insertion

	unordered_multimap<string, string> myumm = {
		{ "strawberry", "red" },
		{ "banana", "yellow" },
		{ "orange", "orange" },
		{ "lemon", "yellow" },
		{ "apple", "red" },
		{ "apple", "green" },
		{ "pear", "green" },
	};


	// erase examples:
	myumm.erase(myumm.begin());     // erasing by iterator
	myumm.erase("apple");             // erasing by key (erases 2 elements)
	myumm.erase(myumm.find("orange"), myumm.end()); // erasing by range

	unordered_multimap<string, string>
		a = { { "orange", "FL" }, { "apple", "NY" }, { "apple", "WA" } },
		b = { { "strawberry", "LA" }, { "strawberry", "NC" }, { "pear", "OR" } };

	a.swap(b);

	cout << myumm.empty() << endl;
	cout << myumm.size() << endl;
	cout << myumm.max_size() << endl;

	system("pause");
	return 0;
}

Logo

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

更多推荐