c++映射类型的属性

c++ map type of attribute

本文关键字:属性 类型 映射 c++      更新时间:2023-10-16

我有一个映射,其中字符串表示属性的名称,第二个值表示该属性应该具有的类型。

map.insert(make_pair("X", iDatatype::iUint));
map.insert(make_pair("Y", iDatatype::iUint));
map.insert(make_pair("RADIANT", iDatatype::iFloat));

其中iDatatype只是所有可能类型的枚举。

 typedef enum
{
    iUnknown    = 0,
    iByte   = 1,
    iChar       = 2,
    iUChar      = 3,
    iShort      = 4.....
} iDatatype;

如果程序得到创建命令,例如,"RADIANT",那么它会查看映射,找到iDatatype值(iter->second)并转到switch case。

 switch (iter->second) {
           case iDatatype::iUint:
           uint value = ......
            // You gotta do what you gonna do
            break;
              } .......

在Switch情况下,函数将被调用,这取决于属性的类型。

这段代码可以工作。但我不确定,如果它是最好的解决方案映射字符串与类型。问题是我不知道应该找什么?您能推荐通常用于此目的的方法或技术吗?非常感谢。

除非您需要将该映射用于其他引用,否则另一种方法是:

if(command == "X" || command == "Y") // make sure command is std::string
                                     // or use strcmp
{
    // create uint
}
else if(command == "RADIANT")
{
    // create float
}

然而,我不确定这将比使用map快多少,因为map使用二分搜索,而这使用迭代搜索。
如果你想获得二进制搜索的提升,而不需要另一个enum,你可以使用函数的映射:

std::map<std::string, std::function<void()> map;
map.insert(make_pair("X", &create_uint));
map.insert(make_pair("Y", &create_uint));
map.insert(make_pair("RADIANT", &create_float));

,然后把它叫做:

std::string key = "X";
map[key]();

也可以传递参数给它,如:

void create_uint(std::string param) { /* ... */ }
std::map<std::string, std::function<void(std::string)> map;
map.insert(make_pair("X", &create_uint));
std::string key = "X";
std::string param = "XYZ";
map[key](param);