map以及使用举例--C++基础

简介: map以及使用举例--C++基础

关联式容器:

map的特性就是所有元素都会根据元素的key被自动排序,map的所有元素是同时拥有key和value。map不允许两个元素有相同的key。而当map同时拥有key和value的时候,它的迭代器可以修改其中的内容吗?key不可以,因为key是用来排列数据的,但是value的值就可以改变了。


当我做到set的测试时候,我想着能不能传一个结构体进来,进行set操作,看看会发生什么,没想到连编译都通不过,实在是想多了,但是map好像可以很简单的实现这个想法欸!

示例代码:

#include"Test.h"
#include<map>
#include<string>
#include<algorithm>//为了使用find、sort等方法
void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  map<string, int> v1;
  v1[string("Janney")] = 9;
  v1[string("Fanney")] = 3;
  v1[string("Fgnney")] = 6;
  v1[string("Tanney")] = 7;
  v1[string("Banney")] = 8;
  v1[string("Benney")] = 1;
  v1[string("Bbnney")] = 0;
  v1[string("Bbnney")] = 90;//key值相同时,相当于修改了value
  pair<string, int> v5("KookNut", 39);
  v1.insert(v5);
  for (map<string, int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << v2->first << endl;
    cout << v2->second << endl;
  }
  int Number = v1[string("KookNut")];
  v1.erase(string("Tanney"));
  map<string, int>::iterator v3 = v1.find(string("Fgnney"));
  v3->second = 99;//修改value
  //v3->first = string("Fddd");
  getchar();
}

自动按照key值排序

image.png


key值不可以修改

image.png


自然的,有multiset就有multimap,multimap的特性以及用法与map完全相同,唯一的区别在于它允许key重复。

简单修改:

void main()
{
  setlocale(LC_ALL, "chs");//识别中文
  multimap<string, int> v1;
  v1.insert(make_pair(("Fanney"),3));
  v1.insert(make_pair(("Fgnney"), 6));
  v1.insert(make_pair(("Tanney"), 7));
  v1.insert(make_pair(("Banney"), 8));
  v1.insert(make_pair(("Benney"), 1));
  v1.insert(make_pair(("Bbnney"), 0));
  v1.insert(make_pair(("Bbnney"), 90));
  pair<string, int> v5("KookNut", 39);
  v1.insert(v5);
  for (map<string, int>::iterator v2 = v1.begin();
    v2 != v1.end();
    v2++)
  {
    cout << v2->first << endl;
    cout << v2->second << endl;
  }
  v1.erase(string("Tanney"));
  map<string, int>::iterator v3 = v1.find(string("Fgnney"));
  v3->second = 99;//修改value
  getchar();
}

image.png

“有志者,事竟成,破釜沉舟,百二秦关终属楚;

苦心人,天不负,卧薪尝胆,三千越甲可吞吴。”

参考书籍:

《STL源码剖析》


目录
相关文章
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
361 2
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
727 73
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
443 3
【C++】map、set基本用法
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
518 5
|
存储 C++ 容器
【C++】map的模拟实现
C++中的`map`是STL中的一种关联容器,存储键值对且键唯一。`map`基于红黑树实现,自动按键排序,支持动态调整、复杂数据类型、丰富的成员函数及双向迭代器。插入、查找等操作保证了对数时间复杂度,适用于需要快速查找和有序存储的场景。
246 3
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
191 2
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
232 2
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
175 2
|
存储 C++ 容器
【C++】开散列实现unordered_map与unordered_set的封装
【C++】开散列实现unordered_map与unordered_set的封装
247 0
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧