在大多数脚本语言中,对象通常是项的集合,绑定到这些对象中的名称.例如(在Javascript中),如果我要初始化这个:
colors = {
Blue: 0x0000FF; //Hex Values
Green: 0x00FF00;
Red: 0xFF0000;
}
Run Code Online (Sandbox Code Playgroud)
在运行时,如果用户输入列出的颜色,我可以轻松返回相应的十六进制值colors["given_color"].
但是,如何在C++或其他编译语言中表达一个甚至类似的远程机制呢?创造一个enum只会静态地具有意义,在一个人为的例子中:
public enum colors{
CYAN = 0x00FFFF,
MAGENTA = 0xFF00FF,
YELLOW = 0xFFFF00
}
Run Code Online (Sandbox Code Playgroud)
不能以任何方式用于查找相应的Hex的说法 std::cin << givenColor;
话虽这么说,我有什么选择转换std::string成数据点,指针或函数指针?
您正在寻找的数据结构称为地图(或字典或关联数组).在C++中,std::map总是排序(通常实现为红黑树),并且std::unordered_map通常更快,因为它使用哈希表(但内容是任意顺序).
std::unordered_map<std::string, int> colors = {
{"blue", 0x0000FF},
{"green", 0x00FF00},
{"red", 0xFF0000}
};
std::string key = /* something */;
std::string value = colors[key];
Run Code Online (Sandbox Code Playgroud)
回答评论中的问题:是的,您可以在地图中存储您想要的任何内容.唯一的限制是对std::unordered_map,关键型需求实现的哈希函数和operator==,和std::map,密钥类型需要实现operator<.值类型可以是任何值.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |