gpt4 book ai didi

c++ 映射类型的属性

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:41 25 4
gpt4 key购买 nike

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

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”而不是查看 map ,找到 iDatatype 值(iter->second)并转到 switch case。

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

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

此代码有效。但我不确定,如果它是将字符串与类型映射的最佳解决方案。还有我不知道应该寻找什么的问题?您能否推荐通常用于此目的的方法或技术?非常感谢。

最佳答案

除非您需要 map 作为其他引用,否则另一种方法是:

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

但是我不确定这会比使用 map 快多少,因为 map 使用二进制搜索,而 map 使用迭代搜索。
如果您想在不需要其他枚举的情况下获得二进制搜索的提升,您可以使用函数映射:

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);

关于c++ 映射类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com