c++ map、multimap 的使用方法

C++ STL Map和Multimap使用方法 Map和multimap将key/value pair当作元素进行管理,可根据key的排序准则自动为元素排序. multimap允许重复元素,map不允许 头文件<map> 注意: 第一个模板实参将成为元素的key类型,第二个模板实参将成员元素的值类型. key和T必须满足以下两个条件: 1.key和value都是可复制的或可搬移的 2.key必须是可比较的 Map和Multim... 阅读详情

一、区别

1. Map:一对一;有序( 自动按 key 升序 );可用 [ ] 赋值和取值;采用 红黑树 结构;实现O(lgn)的查找,插入和删除

2. Mulitimap:多对多;有序( 自动按 key 升序 );无[ ] 操作;可自定义排序函数;采用 红黑树 结构

                multimap<char, int, less<char> > --->less<char>为默认函数,较小的放在前面 即:升序排序

                multimap<char, int, greater<char> > --->greater<char> 系统函数 较大的放前 即:降序排序【可传入自定义排序函数】
3. unordered_map:无序map,采用 hash table 结构

4. unordered_mulitimap:无序mulitimap,采用 hash table 结构

5. map 与 unordered_map 使用时机

map

>通常使用red-black tree实现.
元素被排序.
>相对较小的内存使用(不需要额外的内存用于哈希表).
>相对快速查找:O(log N).

unordered_map

>通常使用hash-table实现.
元素没有排序.
>需要额外的内存来保留哈希表.
>快速查找O(1),但是恒定时间取决于可能相对较慢的hash-function.还要记住,你可以见到Birthday problem.

有序容器里的数据是按关键字的字典顺序进行存储存放的。

二、Map

Map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!
1. map构造函数;
map<string , int >mapstring; map<int ,string >mapint;
map<sring, char>mapstring; map< char ,string>mapchar;
map<char ,int>mapchar; map<int ,char >mapint;

如在打枚举中打印 “指定值对应的字符串”时,可是采用map<int, string>的STL实现。

static inline const char * 
VNET_TYPE_STRING(vnet_type_t type)
{
    static VALUE_STRING_STRUCT g_type_string[] =
    {
        { VNET_TYPE_UNKOWN, "unkown1" },
        { VNET_TYPE_SOCKET, "socket" },
        { VNET_TYPE_RDP,    "rdp" },
        { VNET_TYPE_PCOIP,  "pcoip" },
        { VNET_TYPE_ICA, "ica" },
		{ VNET_TYPE_XRED, "xred" },
        { 0, NULL },
    };
    return GetValueString(g_type_string, (ULONG)type);
}

static inline const TCHAR *
GetValueString(VALUE_STRING_STRUCT *vsarray, ULONG value)
{
    VALUE_STRING_STRUCT *tmp = vsarray;
 
    while ( tmp->string != NULL )
    {
        if ( tmp->value == value )
        {
            return tmp->string;
        }
        tmp++;
    }
    return _T("unkown");
}

2. map添加数据;
map<int ,string> maplive;
1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!

3,map中元素的查找:

find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else cout<<"wo find 112"<<endl;


4,map中元素的删除:
如果删除112;
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else maplive.erase(l_it); //delete 112;

5,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;

For example:

#include <map>
#include <iostream>
 
using namespace std;
int main( )
{
	map <int, int> m1, m2, m3;
	map <int, int>::iterator m1_Iter;
 
	m1.insert ( pair <int, int> ( 1, 10 ) );
	m1.insert ( pair <int, int> ( 2, 20 ) );
	m1.insert ( pair <int, int> ( 3, 30 ) );
	m2.insert ( pair <int, int> ( 10, 100 ) );
	m2.insert ( pair <int, int> ( 20, 200 ) );
	m3.insert ( pair <int, int> ( 30, 300 ) );
 
	cout << "The original map m1 is:";
	for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
		cout << " " << m1_Iter->second;
	cout << "." << endl;
 
	// This is the member function version of swap
	//m2 is said to be the argument map; m1 the target map
	m1.swap( m2 );
 
	cout << "After swapping with m2, map m1 is:";
	for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
		cout << " " << m1_Iter -> second;
	cout << "." << endl;
	cout << "After swapping with m2, map m2 is:";
	for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
		cout << " " << m1_Iter -> second;
	cout << "." << endl;
	// This is the specialized template version of swap
	swap( m1, m3 );
 
	cout << "After swapping with m3, map m1 is:";
	for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
		cout << " " << m1_Iter -> second;
	cout << "." << endl;
 
	system("pause");
}
 

运行结果是:

6.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:

#include <map>
#include <iostream>
 
using namespace std;
int main( )
{
map <int, int> m1;
map <int, int>::iterator m1_Iter;
 
m1.insert ( pair <int, int> ( 1, 20 ) );
m1.insert ( pair <int, int> ( 4, 40 ) );
m1.insert ( pair <int, int> ( 3, 60 ) );
m1.insert ( pair <int, int> ( 2, 50 ) );
m1.insert ( pair <int, int> ( 6, 40 ) );
m1.insert ( pair <int, int> ( 7, 30 ) );
 
cout << "The original map m1 is:"<<endl;
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;
 
}

7, map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对


begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素


get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器


size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数

三、C++中map用法

/************************************************************************
*
* Map的特点: 1、存储Key-value对
* 2、支持快速查找,查找的复杂度基本是Log(N)
* 3、快速插入,快速删除,快速修改记
*
/************************************************************************/
#include <iostream>
#include <string>
#include <map> 
using namespace std; 
int main()
{
	map<const char*,int> m;
	m["a"]=1;
	m["b"]=6;
	m["c"]=9;
	map<const char*,int>::iterator it;
	it=m.begin();
	const char* c =it->first;
	cout<<"first element is :"<<c<<endl;
	int i = m["c"];
	while(it!=m.end()){
		cout << it->first<<";"<<it->second<<endl;
		++it;
	}
	cout <<"m[\"c\"]="<<i<<endl;
	cout <<"sizeof m:"<<m.size()<<endl;
	cout <<"erase m[\"c\"](1:succ 0:failed):"<<m.erase("c")<<endl;
	cout <<"erase m[\"c\"]:"<<m.erase("c")<<endl;
	cout <<"sizeof m:"<<m.size()<<endl;
	cout<<"m[c]="<<m["c"]<<endl;
	cout<<"sizeof m :"<<m.size()<<endl;
 
	system("pause");
	return 0;
}

请注意上面打感叹号的地方,map的大小因此调用了“cout<<"m[c]="<<m["c"]<<endl;”而增加了1个。这点真的另人很奇怪。!!!!

四、multimap 的使用方法

/*
 *
 ********************************************
 *  multimap多重映照容器的基础说明:
 ********************************************
 *
 * multimap多重映照容器:容器的数据结构采用红黑树进行管理
 * multimap的所有元素都是pair:第一元素为键值(key),不能修改;第二元素为实值(value),可被修改
 *
 * multimap特性以及用法与map完全相同,唯一的差别在于:
 * 允许重复键值的元素插入容器(使用了RB-Tree的insert_equal函数) 
 * 因此:
 * 键值key与元素value的映照关系是多对多的关系
 * 没有定义[]操作运算 
 * 
 * Sorted Associative Container  Pair Associative Container   Unique Associative Container
 *
 * 使用multimap必须使用宏语句#include <map>          
 *
 **************************************************************************************
 *
 * 创建multimap对象:
 * //元素键值类型为char,映照数据类型为int,键值的比较函数对象为greater<char>
 * 1.multimap<char,int,greater<char> > a;
 * //指定一个比较函数对象comp来创建map对象   
 * 2.multimap(const key_compare& comp)
 * //multimap<int,char*> b(a); //此时使用默认的键值比较函数less<int>
 * 3.multimap(const multisetr&);
 * 4.multimap(first,last);         
 * 5.multimap(first,last,const key_compare& comp);  
 *
 * //Example:
 * pair<const int ,char> p1(1,'a');
 * pair<const int ,char> p2(2,'b');
 * pair<const int ,char> p3(3,'c');
 * pair<const int ,char> p4(4,'d');
 * pair<const int ,char> pairArray[]={p1,p2,p3,p4};
 * multimap<const int,char> m4(pairArray,pairArray+5);
 * multimap<const int,char> m3(m4);
 * multimap<const int,char,greater<const int> > m5(pairArray,pairArray+5,greater<const int>());
 *
 **************************************************************************************
 *
 * 元素的插入
 * //typedef pair<const key,T> value_type;
 * pair<iterator,bool> insert(const value_type& v);    
 * iterator insert(iterator pos,const value_type& v);
 * void insert(first,last);
 *
 **************************************************************************************
 *
 * 元素的删除
 * void erase(iterator pos);
 * size_type erase(const key_type& k);     //删除等于键值k的元素
 * void erase(first,last);        //删除[first,last)区间的元素
 * void clear();
 *
 **************************************************************************************
 *
 * 访问与搜索
 *
 * iterator begin();iterator end();     //企图通过迭代器改变元素是不被允许的
 * reverse_iterator rbegin();reverse_iterator rend();
 *
 * iterator find(const key_type& k) const;
 * pair<iterator,iterator> equal_range(const key_type& k) const;//返回的pair对象,
 *                //first为lower_bound(k);大于等于k的第一个元素位置
 *                //second为upper_bound();大于k的第一个元素位置
 *
 * 其它常用函数
 * bool empty() const;
 * size_type size() const;
 * size_type count(const key_type& k) const;   //返回键值等于k的元素个数
 * void swap();
 *
 * iterator lower_bound(); // 上界
 * iterator upper_bound(); // 下届
 * pair<iterator,iterator> equal_range();// 确定区间
 *
 *
 *
 ********************************************
 **   cumirror ** tongjinooo@163.com **    **
 ********************************************
 *
 */
 
#include <map>
#include <string>
#include <iostream>
 
// 基本操作与set类型,牢记map中所有元素都是pair
// 对于自定义类,初学者会觉得比较函数如何构造很麻烦,这个可以参照前面的书写示例
// 但若设置键值为int或char类型,无须构造比较函数
 
struct student{
 char* name;
 int age;
 char* city;
 char* phone;
};
 
int main()
{
	 using namespace std;
 
	 student s[]={
	  {"童进",23,"武汉","XXX"},
	  {"老大",23,"武汉","XXX"},
	  {"饺子",23,"武汉","XXX"},
	  {"王老虎",23,"武汉","XXX"},
	  {"周润发",23,"武汉","XXX"},
	  {"周星星",23,"武汉","XXX"}
	 };
	  pair<int,student> p1(4,s[0]);
	  pair<int,student> p2(2,s[1]);
	  pair<int,student> p3(3,s[2]);
	  pair<int,student> p4(4,s[3]);  //键值key与p1相同
	  pair<int,student> p5(5,s[4]);
	  pair<int,student> p6(6,s[5]);
	 multimap<int,student> a;
	 a.insert(p1);
	 a.insert(p2);
	 a.insert(p3);
	 a.insert(p4);
	 a.insert(p5);
	 a.insert(p6);
	 typedef multimap<int,student>::iterator int_multimap;
	 pair<int_multimap,int_multimap> p = a.equal_range(4);
	 int_multimap i = a.find(4);
	 cout<<"班上key值为"<< i->first<<"的学生有:"<<a.count(4)<<"名,"<<"   他们是:"<<endl;
	 for(int_multimap k = p.first; k != p.second; k++)
	 {
		cout<<k->second.name<<endl;
	 }
	 cout<<"删除重复键值的同学"<<endl;
	 a.erase(i);
	 cout<<"现在班上总人数为:"<<a.size()<<".   人员如下:"<<endl;
	 for(multimap<int,student>::iterator j=a.begin(); j != a.end(); j++)
	 {      
		  cout<<"The name: "<<j->second.name<<"      "<<"age: "<<j->second.age<<"   "
		   <<"city: "<<j->second.city<<"      "<<"phone: "<<j->second.phone<<endl;
	 }
 
	 return 0;
}
 

 

进阶C++__STL__set/ multiset和map/ multimap使用方法 一、关联式容器 二、键值对 三、树形结构的关联式容器 set/ multiset 容器 set基本概念 set构造和赋值 set大小和交换 set插入和删除 set查找和统计 set和multiset区别 set / multiset总结 pair对组创建 set容器排序 内置类型指定排序规则 自定义数据类型指定排序规则 map/ multimap容器 map基本概念 map构造和赋值 map大小和交换 map插入和删除 map查找和统计 map容器排序 map 阅读详情

相关推荐

【C++STL的map/ multimap容器 cpp】 -- 深入浅出STL容器map和multimap的使用方法

multimap内部采用的也是红黑树,它们之间的主要区别是multimap支持键值的重复性,所以查找元素的复杂度也是O(logn)。接着,我们定义了一个名为myMultiMap的multimap对象,它的键和值都是字符串类型。上面的代码中,我们首先定义了一个名为myMap的map对象,它的键是一个字符串类型,值是一个整型数。我们向这个map中添加了三组数据,然后使用迭代器访问了所有的元素,并输出了它们的姓名和年龄。其中,map和multimap都是非常有用的关联容器,在处理键值对的场景下非常实用。

2301_79326930的博客 171

大话STL第六期——map/multimap

首先要明白映射类似于函数的对应关系,每个x对应一个y,而map是每个键对应一个值。上期我们讲到pair对组可转入观看,大话STL第五期——set/multiset(含pair对组)map 容器存储的都是 pair 对象,也就是用 pair 类模板创建的键值对。其中,各个键值对的键和值可以是任意数据类型,pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)map同set一样所有元素都会根据元素的键值自动排序(默认从小到大)优点:可以根据key值快速找到value值。...

oorik的博客 2472

c++容器map、unordered_map、multimap的增删改查使用方法详解(示例)

1. unordered_map 代码: #include <iostream> #include <string> #include <unordered_map> using namespace std; int main() { unordered_map<string, int> votes; //插入 votes["小明"]++; //直接添加(值为int类型时才这么用) votes["李华"]++; //当不存在该key时,

zeeq的博客 5373

Multimap运用

实它会把相同的key和value的值会覆盖起来,但是相同的key又可以保留不同的value,因为它的entry的实现是一个Set,Set会对相同的Entry进行曲重,所以会有这种情况。Multimap的特点其实就是可以包含有几个重复key的value值,你可以put进多个不同的value,但是key相同,但是又不是让后面的覆盖前面的内容.//逻辑:如果key不存在,加入key,然后再赋值;//1.传统做法:名字=key,List为Value。2.1 首先引入jar包。Mulitmap使用。

zalan01408980的博客 1407

layui 监听单元格点击事件,获取当前点击单元格的内容以及 所在的表头内容

特别是后台的一些管理系统中 业务中还是会碰见这样的需求呢 如果你的后台使用layui写的话 在表格中 layui 也给我们提供了监听单元格的事件 但是好像不能直接获取到单元格内容个 和 对应的表头 其实 还是可以解决 换个角度使劲就会发现新的世界 不是吗 event: 'username' 在每个表头中加一个 event 属性 这样就可以监听表头事件 记住个 event 和 当前列的字段最好保持一样 table.render({ e...

业余前端的职业经历 1万+

智能车竞赛新手必看:用AD21从零画一块英飞凌TC264核心板(附开源PCB文件)

本文详细介绍了使用Altium Designer 21(AD21)从零开始设计英飞凌TC264核心板的完整流程,涵盖原理图绘制、PCB布线到最终DRC检查的全过程。针对智能车竞赛新手,提供了实用的硬件设计技巧和开源PCB文件,帮助快速掌握TC264核心板开发。

weixin_27017211的博客 246

stl的几个小实例(zz)

导读:   1.遍历打印vector中的元素   2.insert , erase , clear等的基本用法   3.介绍模板类(STL基本都是模板类, 了解了这个程序应该会有助于理解STL中的容器)   4.如何使用命名空间   5.初始化演示(构造函数另外重载的形式)   6.一些基本操作   7.deque的简单用法   8.list的简单用法(注意这里的merge合并操作)   

happy5856的专栏 576

【Anaconda】解决“libGL error: MESA-LOADER: failed to open iris”问题

stackoverflow中的“libGL error: MESA-LOADER: failed to open iris”问题。而在自己创建的conda环境中的lib下出现`GLIBCXX_3.4.30’ not found 的情况。在上述解决方案中,将第一行命令的lib路径换成自己创建的conda环境lib路径,运行指令,问题解决。目前问题解决,总结一下查找资料以及解决方法。运行如下命令,发现本地支持。

quintus0505的博客 5024

深入篇【C++】set和map(multiset/multimap)特性总结与使用

深入篇【C++】set和map(multiset/multimap)特性总结与使用。set/map--->关联式容器?树形结构的关联式容器!带你了解C++的魅力!

Extreme_wei的博客 972

FPGA JTAG接口设计全解析

JTAG是FPGA开发的核心接口,主要用于代码下载和在线调试。14-pin设计中包含TCK、TMS、TDI、TDO四个关键信号,采用信号-地布局增强抗干扰能力,TCK建议串联电阻。10-pin设计需注意转接适配,并推荐使用RCLAMP0524P等低电容TVS二极管进行ESD防护。两种接口设计都强调信号完整性和可靠性,建议PCB布局时保持JTAG走线短且预留调整空间。

在读研究生,FPGA电路设计与功能开发。 2181

ADS1115 0-10V高精度ADC模块原理图设计,已量产

在水质监测、智能气象站、环境感知等领域,0-10V 电压输出的传感器占据了重要地位。这类传感器输出信号稳定、抗干扰能力强,但对数据采集模块的精度、线性度和易用性提出了严苛要求。本文将深度解析一款专为 0-10V 传感器设计的高精度 ADC 模块,从硬件架构、性能指标到工程化实践,全面呈现其设计思路与核心价值。

不脱发的程序猿 276

C++中关联容器map、set、multimap和multiset的使用方法

C++中关联容器map、set、multimap和multiset的使用方法。

记录工作,记录生活 ;) 987

第4篇:使用 NModbus 库快速搭建 Modbus TCP 通信(从零开始用 C# 开发 Modbus 上位机)

本文介绍了如何使用 NModbus 库快速搭建 Modbus TCP 上位机通信程序。通过安装 NModbus4 NuGet 包,开发者可以轻松实现 Modbus TCP 连接,无需手动处理底层协议细节。文章详细演示了核心功能实现: 创建 TCP 客户端连接设备 读取保持寄存器(功能码0x03) 写入单个寄存器(功能码0x06) 关闭连接释放资源 提供完整C#示例代码,包含初始化连接、数据读写等关键操作,帮助开发者快速构建Modbus TCP通信应用。相比手动实现,NModbus库大幅简化了开发流程,特别适

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1045

C++ map和multimap使用方法详细介绍

文章目录

终曲 1万+

Ubuntu搭建Pytorch环境(Anaconda、Cuda、cuDNN、Pytorch、Python、Pycharm、Jupyter)

Ubuntu搭建Pytorch环境(Anconda、Cuda、Pytorch、Python、Pycharm、Jupyter)

funfan的博客 1万+

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1243

【C++STL】map,multimap使用方法详解

C++标准模板库(STL)中的两种关联容器:std::map和std::multimap。它们都是有序关联容器,但有一个关键区别:map中的键必须是唯一的,而multimap允许重复的键。与 std::map 不同,multimap 允许存在多个相同键的元素,因此插入操作总是成功,不会覆盖已有的元素。立即删除 std::multimap 中的所有元素,使容器变为空状态(size() 为 0)。默认构造:使用默认的比较函数(std::less<Key>)和分配器,创建一个空的map。

2301_80224556的博客 922

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++>关联式容器,map,set,multimap,multiset的使用方法

C++>关联式容器,map,set,multimap,multiset的使用方法

qq_42069216的博客 324

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【40C++STL-常用容器----9、map/multimap容器使用方法】

1. map中所有元素都是pair 2. pair中第一个元素为key(键值),起到**索引作用**,第二个元素为value(实值) 3. 所有元素都会根据元素的**键值自动排序**

请关注我,不定时分享个人在大厂嵌入式开发工作经验 371

C++ STL 学习笔记-关联容器 set/multiset、map/multimap简单使用方法及注意事项

set/multiset set内部元素依据其值自动排序,每个元素只能出现一次不能重复,multiset与set相同,只不过允许元素重复 1. 底层数据结构: 红黑树. 2. 支持的函数: insert() 插入元素 clear() 清空元素 erase() 删除元素 empty() 为空返回1,不为空返回0 find()...

netguang的专栏 346

【C++】关联容器探秘:Map与Multimap详解

探索C++ STL中Map与Multimap的奥秘,从Pair的基本操作到Map的插入、遍历,深度解析Operator[]机制。对比Map与Unordered_Map,掌握Multimap特性和使用技巧,包括删除操作,全面理解关联容器应用

No Game No Life 2537

C++:set和map的介绍和使用方法__详细讲解并附有示例代码(序列式容器和关联式容器,set和map的构造和迭代器、增删查、构造,multiset和set的差异,multimap和map的差异)

STL容器主要分为序列式容器和关联式容器。序列式容器(如vector、list)存储线性序列数据,元素间无紧密关联;关联式容器(如map、set)采用非线性结构,元素间存在关联关系,底层通常用红黑树实现,提供O(logN)的查找效率。set用于纯key搜索场景,map用于key-value映射。set支持插入、删除和查找操作,迭代器遍历按key有序;map额外提供operator[]实现高效查找与修改。multiset和multimap允许键值冗余,操作上与set/map类似但需处理重复元素。map的ope

2301_81265126的博客 598
上一篇: Link错误 - dll 链接不一致 - “QZXing::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义
下一篇: C++ STL容器 底层数据结构
LearnLHC
博客等级 码龄10年 183粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值