【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;

 

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

相关文章
|
1月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
8月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
235 2
|
8月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
457 73
|
5月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
223 43
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
160 1
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。

热门文章

最新文章