精华内容
下载资源
问答
  • 实现了map的添加,查找,删除功能,没啥好说的
  • C++ STL Map、迭代器

    千次阅读 2019-04-29 16:11:55
    一 、C++ STL Map #include<iostream> #include<map> #include<string> using namespace std; int my_map() { map<int, string> infor; // 插入 infor[0] = "aaa"; infor.insert(pair&...

    一 、C++ STL Map

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    int my_map()
    {
    	map<int, string> infor;
    	// 插入
    	infor[0] = "aaa";
    	infor.insert(pair<int, string>(1, "bbb")); //pair就是一个键值对,在这里构造一个pair对象,再插入
    	// 在指定位置插入
    	map<int, string>::iterator it=infor.begin();
    	infor.insert(it, pair<int, string>(1, "bbb"));
    	return 0;
    }
    

    详细介绍

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    int main()
    {
    	map<int, string> infor;
    
    	// 插入
    	infor[0] = "aaa";
    	infor.insert(pair<int, string>(1, "bbb")); //pair就是一个键值对,在这里构造一个pair对象,再插入
    	// 在指定位置插入
    	map<int, string>::iterator it = infor.begin();
    	infor.insert(it, pair<int, string>(2, "ccc"));
    	//列表形式插入
    	infor.insert({ {3,"ddd"},{4,"eee"} });
    
    	//取值 其中3为key值
    	infor.at(3);
    	infor[3];
    
    	//容量查询
    	cout << infor.empty() << endl;
    	cout << infor.size() << endl;
    	//查询关键字为key的元素的个数,在map里结果非0即1
    	cout << infor.count(2) << ' ' << infor.count(6) << endl;
    
    	//删除
    	it++;
    	infor.erase(it); // 删除迭代器指向位置的键值对,并返回一个指向下一元素的迭代器
    	infor.erase(4); //根据key删除, 返回删除的元素数量,在map里结果非0即1
    	// infor.clear() 清空map
    
    	//查找 关键字查询,找到则返回指向该关键字的迭代器,否则返回指向end的迭代器
    	it = infor.find(1);
    	if (it != infor.end())
    		infor.erase(it);
    
    	//遍历
    	for (it = infor.begin(); it != infor.end(); it++)
    		cout << it->first<<':'<<it->second << endl;
    
    	system("pause");
    	return 0;
    }
    

    二 、C++ STL 迭代器

    #include<iostream>
    #include<vector>
    using namespace std;
    int iterator()
    {
    	vector<int> vi;
    	vi.push_back(1);
    	vi.push_back(2);
    	vi.push_back(3);
    	vector<int> ::iterator iter = vi.begin();
    	for (; iter != vi.end(); iter++)
    		cout << *iter<<endl;
    	system("pause");
    	return 0;
    }
    
    
    展开全文
  • map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map的定义 ​ map<typename1, typename2> mp; ​ 注:如果是字符串到整型的映射,必须使用string而不能用char数组 2. map容器内...

    6.4 map的常用用法详解

    map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)

    1. map的定义

    map<typename1, typename2> mp;

    注:如果是字符串到整型的映射,必须使用string而不能用char数组

    2. map容器内元素的访问

    (1). 通过下标访问

    ​ 和访问普通的数组是一样的

    #include <bits/stdc++.h>
    #include <map>
    using namespace std;
    int main(){
    	map<char, int> mp;
    	mp['c'] = 20;
    	mp['c'] = 30;
    	cout<<mp['c']<<endl; 
    	return 0;
    }
    输出结果:
    	30
    

    (2). 通过迭代器访问

    map<typename1, typename2>::iterator it;

    map可以使用it->first来访问键,使用it->second来访问值

    #include <bits/stdc++.h>
    #include <map>
    using namespace std;
    int main(){
    	map<char, int> mp;
    	mp['a'] = 20;
    	mp['b'] = 30;
    	mp['c'] = 40;
    	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++){
    		cout<<it->first<<' '<<it->second<<endl;
    	} 
    	return 0;
    }
    输出结果:
        a 20
        b 30
        c 40
    

    map会以键从小到大的顺序自动排序

    3. map常用函数实例解析

    (1). find(key) 返回键为key的映射的迭代器

    (2). mp.,erase(it) it为需要删除的元素的迭代器

    mp.erase(key) key为欲删除的映射的键

    mp.erase(firat, last) first为需要删除的区间的起始迭代器,last为需要删除的区间的末尾迭代器的下一个地址,即为 区间[first, lasts)

    (3). size() 用来获得map中映射的对数

    (4). clear() 用来清空map中的所有元素

    4. map的常见用途

    (1). 需要建立字符与整数之间映射的题目

    (2). 判断大整数或者其他类型数据是否存在的题目

    (3). 字符串和字s符串的映射也有可能会遇到

    实践

    // 6、Map
    #include <bits/stdc++.h>
    #include <map>
    using namespace std;
    int main(){
    	map<string, int> mm;		//定义一个键为String类型,值为Int类型的map 
    	mm["bb"] = 2;
    	mm["aa"] = 1;
    	mm["cc"] = 3;				//map插入值 
    	//遍历map
    	cout<<"map中元素的个数为: "<<mm.size()<<endl;
    	cout<<"遍历整个map"<<endl; 
    	for(map<string, int>::iterator it = mm.begin(); it != mm.end(); it++){
    		cout<<it->first<<':'<<it->second<<endl;
    	} 
    	cout<<"观察插入map元素可知,map会以键从小到大的顺序自动排序"<<endl;
    	if(mm.find("aa") != mm.end()){
    		cout<<"map中包含aa这个键"<<endl; 
    	} else{
    		cout<<"map中不包含aa这个键"<<endl; 
    	}
    	mm.erase("aa");		//删除aa这个键
    	if(mm.find("aa") != mm.end()){
    		cout<<"map中包含aa这个键"<<endl; 
    	} else{
    		cout<<"map中不包含aa这个键"<<endl; 
    	}
    	cout<<"map中元素的个数为: "<<mm.size()<<endl;	
    	return 0;
    } 
    

    map中元素的个数为: 3
    遍历整个map
    aa:1
    bb:2
    cc:3
    观察插入map元素可知,map会以键从小到大的顺序自动排序
    map中包含aa这个键
    map中不包含aa这个键
    map中元素的个数为: 2

    展开全文
  • STL map的几种赋值方式

    千次阅读 2020-12-08 11:55:35
    map的几种赋值方法比较 学习或者工作中经常会用到map,赋值是常用的操作,map有好几种赋值方法,哪一种方式最有效?... // 2) Assignment using member function insert() and STL pair Foo.insert(std::pair&l

    map的几种赋值方法比较

    学习或者工作中经常会用到map,赋值是常用的操作,map有好几种赋值方法,哪一种方式最有效?网上了解了一些资料,在这里总结一下。

    常用的赋值方式有如下几种。

       // 1) Assignment using array index notation
       Foo["Bar"] = 12345;
    
       // 2) Assignment using member function insert() and STL pair
       Foo.insert(std::pair<string,int>("Bar", 12345));
    
       // 3) Assignment using member function insert() and "value_type()"
       Foo.insert(map<string,int>::value_type("Bar", 12345));
    
       // 4) Assignment using member function insert() and "make_pair()"
       Foo.insert(std::make_pair("Bar", 12345));
        
       // 5)C++ 11
       Foo.emplace("Bar", 12345);

     一、 [] 与 insert这两种方式存在语义差异

    • []替换旧值(如果有)
    • insert忽略新值(如果已经存在旧值)

    二、几种 insert 方式的比较

    • std::map<std::string, int>::value_type  和 std::pair<std::string const, int>之间没有重要的差别
      std::make_pair("Bar", 12345) 相比 std::pair<std::string, int>("Bar", 12345)开销更少

       

    一般来说,[] 用于更新,insert会忽略重复项。std::make_pair遵循DRY准则,不会重复自身。

    启用C++ 11的情况下,推荐使用emplace,最简单也是最效的方式。(它的行为是insert,但是它构造了新的元素)

    学习STL的时候,看到前辈表达了STL的爱情观hh,分享一下。

    前段日子读了STL的源码,大师级的作品真是精致到让人喟叹。当然,有时候你在网上还是可以看到很多对STL的批评,例如,对编译器要求很高,很多时候出错了的话,打印出来的错误信息总是让人摸不着头脑的。这确实是比较头疼的一个问题,因为模板编程,编译的过程总是分为两个部分的,是先要找到相应的模板,然后才对模板进行具现化,有时候单纯从模板来看,似乎很完整,没有什么问题呀,可是一旦投入使用了,才发现找不到合适的具现化版本,于是又要搞特化了。某日在路上行走,突然想起爱情这个难题,突然想起具现化,

    突然觉得爱情就像是一个模板类,是想象,没有实现的时候,它看起来很完美,很丰富,可是爱情一旦具现化,它便成了独此一家的一个类,想象的空间本就狭窄了,倘若需求比较复杂,还须得有偏特化版本,不然就要出错。每个女人心目中的恋爱对象都是完美的,是那种选择性的完美,她爱的并不是那个实体,而是加诸于该实体上的想象。

     

     

     

    展开全文
  • C++STL map的指针与复制

    千次阅读 2020-01-14 16:09:50
    基本上所有的博客都在说map里“=”是浅拷贝,经试验发现这些说法不对。 测试代码: #include <iostream> #include <map> using namespace std; int main() { map<string, int> m1; //初始化...

    基本上所有的博客都在说map里“=”是浅拷贝,经试验发现这些说法不对。

    测试代码:

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
        map<string, int> m1; //初始化m1
        map<string, int> m2; //初始化m2,或在此赋值m1给m2
        map<string, int> *m3; //初始化map指针
        m1["a"] = 1;
        m1["b"] = 2;
        m3 = &m1;   //将m1的地址赋值给m3
        m2 = m1;    //m1赋值给m3
        //输出原始数据
        cout<<"origin data ..."<<endl;
        cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
        cout<<"m2[a]:"<<m2["a"]<<"   m2[b]:"<<m2["b"]<<endl;
        cout<<"m3[a]:"<<(*m3)["a"]<<"   m3[b]:"<<(*m3)["b"]<<endl;
    
        //改变m2,不会改变m1的值
        m2["a"] = 3;
        m2["b"] = 5;
        cout<<"after change m2  ..."<<endl;
        cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
        cout<<"m2[a]:"<<m2["a"]<<"   m2[b]:"<<m2["b"]<<endl;
        //改变m3,会改变m1的值
        (*m3)["a"] = 10;
        (*m3)["b"] = 11;
        cout<<"after change m3  ..."<<endl;
        cout<<"m1[a]:"<<m1["a"]<<"   m1[b]:"<<m1["b"]<<endl;
        cout<<"m3[a]:"<<(*m3)["a"]<<"   m3[b]:"<<(*m3)["b"]<<endl;
    
        return 0;
    }
    

     

    测试结果:

     

    可以看到,如果直接赋值m1给m2,改变m2并不能改变m1的值;如果将m1的地址赋值给m3指针,会改变m1的值。map指针的读取方式,除了众多博客里看到的迭代方式之外,还可以直接采用:

    值=(*m3)[键]

     

    展开全文
  • c++ STL map使用详细总结

    千次阅读 2020-02-15 11:29:35
    mapSTL的一个关联容器,它提供一对一的hash,使用时需要#include<map>。第一个值可以称为关键字(key),每个关键字只能在map中出现一次;第二个值称为该关键字的值(value)。map以红黑树为底层实现机制,会根据键值...
  • map在底层使用了红黑树来实现,unordered_map是C++11标准中新加入的容器,它的底层是使用hash表的形式来完成映射的功能,map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到...
  • stl map 基本用法

    2017-09-27 10:27:17
    构造函数map, string> m_map; map, string> m_map = {make_pair(1, "test")};插入m_map[0] = "test"; m_map.insert(pair,string>(1, "test")); m_map.insert(map, string>::value_type (1, "test"));删除 map
  • STL map的复制

    2019-02-26 15:51:46
    STL map的复制
  • STL map::find 使用方法简单例子

    千次阅读 2019-11-15 00:47:23
    map中的find方法主要用于查找,给定key,可以返回该元素的对应迭代器,然后利用这个迭代器访问value内容. //map::find #include <iostream> #include <map> int main () { std::map<char,int>...
  • map中的insert函数插入失败后,返回值应该是 **pair<iterator, bool>**型,第二个参数bool值在插入成功时返回true,失败时返回false 那么第一个返回值iterator是什么? 很自然地想到这个迭代器应该指向被...
  • map map 是一种关联式容器,包含关键字 / 值 对,一对一 有着映射关系
  • stl map

    2017-07-28 09:50:52
    今天学了STLmap,趁热打铁来整理一下。 map是一个关联容器用来描述数据之间的映射关系. 1.数据插入 mapstring ,int> M; M.insert(pairstring,int>("sj",1)); M.insert(pairstring,int>("sjdk",2)); map...
  • 可以在windbg导出stl map和set的插件,使用方法参考我csdn的博客http://blog.csdn.net/yichigo/article/details/38232511
  • STL map例子

    2011-09-14 16:19:53
    STL map例子 基本操作包括增删改查!
  • STL map&set用法详解

    千次阅读 2018-04-09 16:50:27
    STL标准模板库中用得最多的两个容器map和set是我们每个人必须熟练掌握的,不论是在Oj、技术面还是工作中如果能非常熟练的运用这两个容器,那么写起代码来必然是事半功倍的,反之可能会在某些问题上寸步难行。map和...
  • C++ STL map原理及应用

    千次阅读 2020-03-23 09:47:40
    1. map是一类关联式容器。底层是用红黑树实现,根据key值有序排列,查找效率很高。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而...
  • 简单说说C++ STL map的特点,map是有序键值对,默认是按key值递增存储,可以理解为函数有递增趋势的函数f(x, y),既然是函数,那么一个x只能对应一个y, 而一个y可以有多个x对应,也就是说,在map中,key不能重复,...
  • C++浅谈哈希表和STLmap

    千次阅读 2018-08-23 10:42:58
    对比哈希表和STL map。哈希表是怎么实现的?如果输入数据规模不大, 我们可以使用什么数据结构来代替哈希表。 解答: 对比哈希表和STL map 在哈希表中,实值得存储位置由其键值对应得哈希函数值决定。因此,存储...
  • C++ STL map容器迭代器遍历 标准库为 map 容器配备的是双向迭代器(bidirectional iterator)。这意味着,map 容器迭代器只能进行 ++p、p++、–p、p–、*p 操作,并且迭代器之间只能使用 == 或者 != 运算符进行比较...
  • 零基础都能看懂的 STL map 详解

    千次阅读 多人点赞 2021-08-21 15:55:08
    map 在编程中是经常使用的一个容器,本文来讲解一下 STL 中的 map,赶紧来看下吧! 一、什么是 map ? map 是具有唯一键值对的容器,通常使用红黑树实现。 map 中的键值对是 key value 的形式,比如:每个身份证号...
  • C++ STL map 删除一个元素 erase 操作

    千次阅读 2019-01-09 16:48:40
    C++ STL map 删除一个元素 erase 操作
  • stl map遍历删除的方法

    2016-12-05 13:18:48
    for (std::map >::iterator iter = clearing_observations_map_.begin(); iter != clearing_observations_map_.end();) { if (ros::Time::now() - iter->first >= ros::Duration(clearing_cycle_time_)) {
  • STL map中key为结构体的用法

    千次阅读 2018-05-20 18:40:14
    最近在使用stl中的map容器时,碰到key为结构体的情况,总结如下,以便提醒自己。 我的使用情景是,我需要根据不同的比例尺、道路类型这两个参数获取到对应的道路宽度,由于我是使用map解决这个问题的,自然而然的就...
  • C++:STL map 的 find 函数与 [] 运算符区别 map::find 是 Get iterator to element。 map::operator[] 是 Access element。 最大的区别是当待查找的 KEY 不存在时: 1.map::find 返回一个空迭代器(map::end)...
  • c++stl map数组下标的使用

    千次阅读 2017-04-16 16:17:21
    c++stl map数组下标的使用
  • 关于STL map的for each

    2017-02-05 14:56:39
    关于STL map的for eachSTL map顾名思义,是一种key-value映射格式的数据结构。 map中每一个key-value元素,其实就是一个std::pair。 在遍历std::map时,可以用for each语法,一一获取其中的std::pair,进行处理。...
  • C++ STL map集合的使用

    万次阅读 2021-09-30 14:17:52
    有时需要根据索引找到对应的元素,像键值对一样的查找,并对这些元素进行操作。可以同故宫调用STL里面的map来解决这个问题。
  • STL map的高效插入和更新

    千次阅读 2018-04-03 17:27:04
    #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;string&gt; #include&lt;cstdlib&gt; #include&...map&gt; using namespace std; template&l
  • stl map 以指针作为value

    2019-09-05 12:16:37
    #include <iostream> #include <map> using namespace std; struct MyStruct { int i; char c; MyStruct(int i, char c) { this->i = i; this->c = c; } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,041
精华内容 26,816
关键字:

stlmap