map,pair小探索

/*************************************************************************
	> File Name: mmap.cpp
	> Author: 
	> Mail: 
	> Created Time: 2020年05月20日 星期三 07时30分51秒
 ************************************************************************/

#include<iostream>
#include<map>
using namespace std;
int main(){
    typedef std::pair<std::string,std::string> my_key_type;
    typedef std::map<my_key_type,int> my_map_type;
    typedef std::map<int,int> my_map_type2;
    my_map_type m;
    my_map_type2 m2;
    m.insert(my_map_type::value_type(my_key_type("A","B"),43));
    m.insert(my_map_type::value_type(my_key_type("A2","B2"),45));
    m2.insert(my_map_type2::value_type(1,2));
    m2.insert(my_map_type2::value_type(3,4));
    my_map_type::iterator iterator;
    my_map_type2::iterator iterator2;
    for(iterator = m.begin();iterator !=m.end();iterator++)
    {
        //cout<< iterator->first<<endl; //这行会报错:error: no type named ‘type’ in ‘struct std::enable_if<false, std::basic_ostream<char>&>’
        cout<< iterator->second<<endl; 
    }
    for(iterator2 = m2.begin();iterator2 != m2.end(); iterator2++)
    {
        cout<< iterator2->first<<endl; //这行正常运行
        cout<< iterator2->second<<endl;
    }
    return 0;
}

使用gdb进行调试

   │16          my_map_type2 m2;                                                                                                                                                             │
   │17          m.insert(my_map_type::value_type(my_key_type("A","B"),43));                                                                                                                  │
   │18          m.insert(my_map_type::value_type(my_key_type("A2","B2"),45));                                                                                                                │
   │19          m2.insert(my_map_type2::value_type(1,2));                                                                                                                                    │
   │20          m2.insert(my_map_type2::value_type(3,4));                                                                                                                                    │
   │21          my_map_type::iterator iterator;                                                                                                                                              │
   │22          my_map_type2::iterator iterator2;                                                                                                                                            │
   │23          for(iterator = m.begin();iterator !=m.end();iterator++)                                                                                                                      │
   │24          {                                                                                                                                                                            │
   │25              //cout<< iterator->first<<endl; //这行会报错:error: no type named ‘type’ in ‘struct std::enable_if<false, std::basic_ostream<char>&>’                                   │
   │26              cout<< iterator->second<<endl;                                                                                                                                           │
   │27          }                                                                                                                                                                            │
   │28          for(iterator2 = m2.begin();iterator2 != m2.end(); iterator2++)                                                                                                               │
   │29          {                                                                                                                                                                            │
   │30              cout<< iterator2->first<<endl; //这行正常运行                                                                                                                            │
   │31              cout<< iterator2->second<<endl;                                                                                                                                          │
   │32          }                                                                                                                                                                            │
b+ │33          return 0;                                                                                                                                                                    │
   │34      }                                                                                                                                                                                │
   │35                                                                                                                                                                                       │
   │36                                                                                                                                                                                       │
   │37                                                                                                                                                                                       │
   └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
B+>i33          return 0;                                                                                                                                                        L??   PC: ?? 
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and omain documentation resources online at:                                                                                                     L33   PC: 0x5555555553b8
(gdb) r
Starting program: /home/acat/test/mmap
43
45
1
2
3
4

Breakpoint 1, main () at mmap.cpp:33
(gdb) p m
$1 = std::map with 2 elements = {[{first = "A", second = "B"}] = 43, [{first = "A2", second = "B2"}] = 45}
(gdb) p m2
$2 = std::map with 2 elements = {[1] = 2, [3] = 4}
(gdb) 

从上面的gdb调试结果可以看出,输出结果是:
43
45
1
2
3
4
m的内容是:
{[{first = “A”, second = “B”}] = 43, [{first = “A2”, second = “B2”}] = 45}
m2的内容是:
{[1] = 2, [3] = 4}
解释:可能map中有很多的key,value对,但是在m中,key的本身是一个pair类型。可以看出,map中的key和value的表示形式是:{[key1]=value1,[key2]=value2},可以使用iterator来依次遍历各个[key]=value。在m中直接输出iterator->first却报错了(因为key是pair类型的)。而在m2中,iterator2->first能够直接输出(因为key是int类型的)

PS:
在这里插入图片描述

利用map的find方法,以key作为参数,找到map中对应key的iterator

	typedef std::map<std::string,int *> my_map_type3;
    my_map_type3 m3;
    int aa = 3;
    m3.insert(my_map_type3::value_type("lihao",&aa));
    my_map_type3::iterator iterator3;
    iterator3 = m3.find("lihao");
    cout<< iterator3->first<<endl;
    cout<< *iterator3->second <<endl;

输出:

lihao
3

参考:
https://stackoverflow.com/questions/15451287/what-does-iterator-second-mean
https://stackoverflow.com/questions/6371713/c-stl-map-stdpair-as-the-key

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值