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源码剖析》


目录
相关文章
|
1月前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
31 3
【C++】map、set基本用法
|
1月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
23 5
|
1月前
|
存储 C++ 容器
【C++】map的模拟实现
C++中的`map`是STL中的一种关联容器,存储键值对且键唯一。`map`基于红黑树实现,自动按键排序,支持动态调整、复杂数据类型、丰富的成员函数及双向迭代器。插入、查找等操作保证了对数时间复杂度,适用于需要快速查找和有序存储的场景。
23 3
|
5月前
|
C++ 容器
【C++】map和set封装
【C++】map和set封装
44 2
|
5月前
|
存储 C++ 容器
【C++】map和set深度讲解(下)
【C++】map和set深度讲解(下)
69 2
|
5月前
|
存储 自然语言处理 Java
【C++】map和set深度讲解(上)
【C++】map和set深度讲解(上)
54 2
|
5月前
|
存储 算法 C++
C++一分钟之-扁平化映射与unordered_map
【7月更文挑战第5天】C++的STL `unordered_map`是键值对的快速查找容器,基于哈希表。常见问题包括哈希函数选择、键类型限制、内存管理和迭代顺序不确定性。要避免问题,需优化哈希函数,确保自定义类型支持哈希和比较操作,合理管理内存,不依赖迭代顺序。提供的代码示例展示了如何为自定义类型定义哈希函数并操作`unordered_map`。正确使用能提升代码效率。
60 0
C++一分钟之-扁平化映射与unordered_map
|
5月前
|
存储 C++ 容器
【C++】开散列实现unordered_map与unordered_set的封装
【C++】开散列实现unordered_map与unordered_set的封装
61 0
|
5月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
77 0
|
5月前
|
存储 C++ 索引
C++基础知识(八:STL标准库 Map和multimap )
C++ 标准模板库(STL)中的 map 容器是一种非常有用的关联容器,用于存储键值对(key-value pairs)。在 map 中,每个元素都由一个键和一个值组成,其中键是唯一的,而值则可以重复。