编程语言
首页 > 编程语言> > C++进阶(unordered_set+icode9_map模拟实现)

C++进阶(unordered_set+icode9_map模拟实现)

作者:互联网

unordered_set

使用

构造函数

unordered_set<string> uset;//构造函数
unordered_set<string> uset2(++uset.begin(),uset.end());//,如果不想全部拷贝,可以使用 unordered_set 类模板提供的迭代器,在现有 unordered_set 容器中选择部分区域内的元素,为新建 unordered_set 容器初始化
unordered_set ( const unordered_set& ust );//拷贝构造

容量和大小

empty();//若容器为空,则返回 true;否则 false
size();//返回当前容器中存有元素的个数

迭代器

begin();//返回指向容器中第一个元素的正向迭代器
end();//返回指向容器中最后一个元素之后位置的正向迭代器
cbegin();//和begin()功能相同,只不过其返回的是const类型的正向迭代器
cend();//和end()功能相同,只不过其返回的是const类型的正向迭代器

元素的访问和查找

find(key);//查找以值为 key 的元素,如果找到,则返回一个指向该元素的正向迭代器;反之,则返回一个指向容器中最后一个元素之后位置的迭代器(如果end()方法返回的迭代器)
count(key);//在容器中查找值为 key 的元素的个数
equal_range(key);//返回一个pair对象,其包含2个迭代器,用于表明当前容器中值为key的元素所在的范围

元素的插入和删除

emplace();//向容器中添加新元素,效率比insert()方法高
emplace_hint();//向容器中添加新元素,效率比 nsert()方法高
insert();//向容器中添加新元素
erase();//删除指定元素
clear();//清空容器,即删除容器中存储的所有元素
swap();//交换2个 unordered_set 容器存储的元素,前提是必须保证这 2 个容器的类型完全相等

实例演示:

void test_unordered_set()
{
	unordered_set<int> us;
	set<int> s;

	int arr[] = { 4,2,3,1,6,8,9,3 };

	for (auto e : arr)
	{
		us.insert(e);
		s.insert(e);
	}

	unordered_set<int>::iterator usit = us.begin();
	set<int>::iterator sit = s.begin();

	cout << "unordered_set:" << endl;
	while (usit != us.end())
	{
		cout << *usit << " ";
		++usit;
	}
	cout << endl;
	
	cout << "set:" << endl;
	while (sit != s.end())
	{
		cout << *sit << " ";
		++sit;
	}
	cout << endl;
}

unordered_map

介绍

使用

构造函数

unordered_map<string,string> umap//构造函数: 可以不初始化地构造,也可以用一个容器的迭代器去构造
unordered_map ( const unordered_map& ump );//拷贝构造

容量和大小

empty();//判断容器是否为空,,若容器为空,则返回 true;否则 false
size();//返回容器中的元素个数

迭代器

begin();//返回指向容器中第一个键值对的正向迭代器
end();//返回指向容器中最后一个键值对之后位置的正向迭代器
cbegin();//和 begin() 功能相同,只不过在其基础上增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对
cend();//和 end() 功能相同,只不过在其基础上,增加了 const 属性,即该方法返回的迭代器不能用于修改容器内存储的键值对

元素的访问和查找

operator[key];//该模板类中重载了 [] 运算符,其功能是可以向访问数组中元素那样,只要给定某个键值对的键 key,就可以获取该键对应的值。注意,如果当前容器中没有以 key 为键的键值对,则其会使用该键向当前容器中插入一个新键值对
at(key);//返回容器中存储的键 key 对应的值,如果key不存在,则会抛出 out_of_range 异常
find(key);//查找以key为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果end()方法返回的迭代器)

元素的插入和删除

emplace();//向容器中添加新键值对,效率比 insert()方法高
emplace_hint();//向容器中添加新键值对,效率比insert()方法高
insert();//向容器中添加新键值对
erase();//删除指定键值对
clear();//清空容器,即删除容器中存储的所有键值对
swap();//交换2个unordered_map容器存储的键值对,前提是必须保证这2个容器的类型完全相等

 
void test_unordered_map() { unordered_map<int, int> um; map<int, int> m; int arr[] = { 4,2,3,1,6,8,9,3 }; for (auto e : arr) { um.insert(make_pair(e, e)); m.insert(make_pair(e, e)); } unordered_map<int, int>::iterator umit = um.begin(); map<int, int>::iterator mit = m.begin(); cout << "unordered_map:" << endl; while (umit != um.end()) { cout << umit->first << ":" << umit->second << endl; ++umit; } cout << "map:" << endl; while (mit != m.end()) { cout << mit->first << ":" << mit->second << endl; ++mit; } }

 

标签:c++,icode9,函数,swap,语言,C语言,代码,构建,google
来源: