当前位置:  开发笔记 > 编程语言 > 正文

有std :: map的最佳方法,如果没有密钥,我可以定义返回的内容吗?

如何解决《有std::map的最佳方法,如果没有密钥,我可以定义返回的内容吗?》经验,为你挑选了1个好方法。

我使用std :: map将一些unsigned char机器值映射到人类可读的字符串类型,例如:

std::map DEVICE_TYPES = {
    { 0x00, "Validator" },
    { 0x03, "SMART Hopper" },
    { 0x06, "SMART Payout" },
    { 0x07, "NV11" },
};

我想修改它,以便如果传递的密钥不存在,地图将返回"未知".我希望调用者接口保持不变(即他们只是使用[]运算符从地图中检索字符串).最好的方法是什么?我在Windows 7上有C++ 11可用.



1> Edgar Rokjān..:

您可以创建一些包含operator []重载的包装器以提供所需的行为:

class Wrapper {
public:
    using MapType = std::map;

    Wrapper(std::initializer_list init_list)
        : device_types(init_list)
    {}

    const std::string operator[](MapType::key_type key) const {
        const auto it = device_types.find(key);
        return (it == std::cend(device_types)) ? "Unknown" : it->second;
    }

private:
    const MapType device_types;
};

wandbox示例

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有