【C++】-- STL之unordered_map/unordered_set详解(三)

简介: 【C++】-- STL之unordered_map/unordered_set详解

6.查找

(1)find( )

根据k返回k所在位置的迭代器,如果没找到就返回end

iterator find ( const key_type& k );

查找洒水车:

cout << um1.find("洒水车")->second << endl;

(2)count( )

统计容器中key为k的元素的个数:

size_type count ( const key_type& k ) const;

统计um1中key为"搅拌车"的元素个数:

cout << um1.count("搅拌车") << endl;

7.元素修改

(1)insert( )

1. pair<iterator,bool> insert ( const value_type& val );//插入元素,成功返回的pair的第二个元素为true,失败则为false
2. iterator insert ( const_iterator hint, const value_type& val );//返回插入元素的位置
3. template <class InputIterator>
4. void insert ( InputIterator first, InputIterator last );//插入一段区间
5. void insert ( initializer_list<value_type> il );//将列表作为元素插入容器中

①插入元素

1.  cout << um1.insert(make_pair<string, int>("大货车", 9)).second << endl;//不存在,插入成功
2.  cout << um1.insert(make_pair<string, int>("搅拌车", 1)).second << endl;//已存在,插入失败

 ②返回插入元素的位置

cout << um1.insert(um1.begin(), make_pair<string, int>("扫地车", 10))->second << endl;

③ 插入一段区间

1. unordered_map<string, int> um2(um1.begin(), um1.end());
2.  unordered_map<string, int>::iterator it2 = um2.begin();
3. 
4.  while (it2 != um2.end())
5.  {
6.    cout << it2->first << ":" << it2->second << endl;
7.    it2++;
8.  }
9.  cout << endl;

④将列表作为元素插入容器中

1.     unordered_map<string, int> um3;    
2.     um3.insert({ { "摩托车",3 }, { "电动车",7 }});
3.  unordered_map<string, int>::iterator it3 = um3.begin();
4.  while (it3 != um3.end())
5.  {
6.    cout << it3->first << ":" << it3->second << endl;
7.    it3++;
8.  }
9.  cout << endl;

 

(2)erase( )

 删除元素:

1. iterator erase ( const_iterator position );//删除position位置的元素,并返回删除元素的位置
2. size_type erase ( const key_type& k );//返回删除值为k的元素的个数
3. iterator erase ( const_iterator first, const_iterator last );//删除从first到last区间的元素,并返回删除的last元素的位置

①删除position位置的元素,并返回删除元素的位置

删除搅拌车:

cout << um1.erase(um1.find("搅拌车"))->first << endl;

② 删除值为k的元素的,k存在返回1,k不存在返回0:

cout << um1.erase("自行车") << endl;

③ 删除从first到last区间的元素,并返回删除的last元素的位置

 

cout << um1.erase(um1.find("消防车"), um1.find("扫地车"))->first << endl;

(3)clear( )

清空所有元素:

void clear() noexcept;

清空um1中所有元素:

um1.clear();

(4)swap( )

交换两个同类型容器中的元素:

1.  unordered_map<string, string> um4;
2.  um4.insert(make_pair<string, string>("spring", "春天"));
3.  um4.insert(make_pair<string, string>("summer", "夏天"));
4.  um4.insert(make_pair<string, string>("autumn", "秋天"));
5.  um4.insert(make_pair<string, string>("winter", "冬天"));
6. 
7.  unordered_map<string, string> um5;
8.  um5.insert(make_pair<string, string>("east", "东"));
9.  um5.insert(make_pair<string, string>("south", "南"));
10.   um5.insert(make_pair<string, string>("west", "西"));
11.   um5.insert(make_pair<string, string>("north", "北"));
12. 
13.   um4.swap(um5);
14. 
15.   unordered_map<string, string>::iterator it4 = um4.begin();
16.   while (it4 != um4.end())
17.   {
18.     cout << it4->first << ":" << it4->second << endl;
19.     it4++;
20.   }
21.   cout << endl;
22. 
23.   unordered_map<string, string>::iterator it5 = um5.begin();
24.   while (it5 != um5.end())
25.   {
26.     cout << it5->first << ":" << it5->second << endl;
27.     it5++;
28.   }
29.   cout << endl;

 

系桶和哈希策略的函数等介绍完哈希表之后才能理解。

相关文章
|
7天前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
15 1
|
20天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
36 7
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
66 4
|
23天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
31 0
|
7月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
4月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
4月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
5月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
5月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
5月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程