map与数组的使用

本文展示了在C++中如何使用map数组存储结构体数据,并通过changeMap函数修改数组中的元素。程序使用了两种方法向map中添加数据:[]操作符和insert函数,并通过迭代器进行遍历和打印。代码还演示了如何使用C++11的范围for循环简化遍历过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天公司领导突然给了一个任务,使用到的map和数组,进公司快一年了,一直用的是c,c++似乎很久没用过了,这里记录一下。

#include <map>
#include <string>
#include <stdlib.h>
#include <stdio.h>

enum
{
    TYPE_ID_0,
    TYPE_ID_1,
    TYPE_ID_2,
    TYPE_ID_3,
    TYPE_ID_4,
    TYPE_ID_5,
    TYPE_ID_6,
    TYPE_ID_MAX
};
typedef struct mapData
{
    int id;
    std::string key;
}MapData;

std::map<std::string, MapData> g_mapData[TYPE_ID_MAX];

int changeMap(int type);
int main()
{
    changeMap(2);

    for(int i = 0 ; i < TYPE_ID_MAX; i++)
    {
        auto data = g_mapData[i];
        for(auto it : data)
        {
            printf("i = %d, string: %s, id = %d, key = %s\n", i, it.first.c_str(), it.second.id, it.second.key.c_str());
        }
    }

    return 0;
}

int changeMap(int type)
{
    auto &data = g_mapData[type];
    MapData newData = {20, "2000"};
    data["1"] = newData;
    data.insert(std::pair<std::string, MapData>("2", newData));
    return 0;
}

这里定义了一个 map 的数组 std::map<std::string, MapData> g_mapData[TYPE_ID_MAX];

那么 g_mapData[i] 每一个都是map数据结构,而这个map里 key 是 std::string 类型,value 是一个结构体。

int changeMap(int type)
{
    auto &data = g_mapData[type];
    MapData newData = {20, "2000"};
    data["1"] = newData;
    data.insert(std::pair<std::string, MapData>("2", newData));
    return 0;
}

这个函数主要修改数组的值,用的是引用,所以这样改之后,g_mapData[type] 这个数组下标就会有值了。这里添加数据用到了2种方法,一个是[]操作符,一个是insert()函数。而输出打印则用了一个c++11版本的for循环:for(auto it : data),这样的话,it 就是一个 std::pair<std::string, MapData> 类型,其 first 就是对应 std::string类型的key值, second 就是对应MapData 的 value值。但这个输出只会把非空的map打印出来了,如:

改用迭代器方式也是一样的输出

    for(int i = 0 ; i < TYPE_ID_MAX; i++)
    {
        auto data = g_mapData[i];
        for(auto ite = data.begin(); ite != data.end(); ite++)
        {
            printf("i = %d, string: %s, id = %d, key = %s\n", i, ite->first.c_str(), ite->second.id, ite->second.key.c_str());
        }
    }

输出和之前是一样的,因为空的 map 中 begin() 和 end() 是相等的,for循环不会执行的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值