我有一个我需要跟踪的号码列表。数字松散相关,但代表截然不同的项目。我想保留一个数字列表,但能够通过名称引用它们,以便我可以调用它们并在需要的地方轻松使用它们。有点像库存清单,其中数字都是指零件ID,我想称之为idPart1,idPart2,idPart3,因此在使用它们时,它们的目的很容易识别。
最好的方法是什么?
1)定义结构。说,库存。将包括许多int成员,part1,part2等。要使用,将创建结构的实例,分配给成员的值,并根据需要使用struct.member来使用这些数字。
2)定义枚举。使用part1,part2作为枚举文字。将实际值存储在向量或列表中,每个值都在与枚举中数字名称的值对应的索引处。使用枚举文字来检索值,列出[enumLit]
3)完全不同的东西
我不需要对这些数字做任何其他事情 - 只需每隔一段时间查看一次。由于没有处理,我认为他们的新课程是矫枉过正,但我愿意相信其他。
有什么建议吗?
答案 0 :(得分:2)
让我试着改写一下你在这里要做的事情。您希望使用您的代码的开发人员能够引用一组预定义的数值:
如果值在运行时不会改变,并且它们是整数值,则可以使用枚举,如Mark Ransom所示。
如果值在运行时不会更改,并且它们是非整数值,则可以使用#define或const变量:
#define PART1 1.3
#define PART2 "1233-456"
或
namespace PartNumbers
{
const double Part1 = 1.3;
const char* Part2 = "123-456"
}
如果值可能在运行时更改,则可以使用您标识的两个选项之一。这两个选项都具有需要实例化对象的缺点,该对象保持当前部件号值。其他选项更易于实现,不需要任何运行时查找。一切都在编译时得到解决。
如果要访问新的零件类型,所有这些选项都要求您的代码用户重新编译。您的第一个选项可能要求在添加新零件类型时重新编译现有代码,即使现有代码不访问它们也是如此;它更容易发生内存布局变化。
答案 1 :(得分:1)
您可以使用带字符串的地图作为密钥。
std::map<string,int> mymap;
mymap["part1"] = value1;
cout << mymap["part1"];
答案 2 :(得分:1)
您可以使用:
std::map<string, int> someMapName;
将键作为字符串,将实际数字作为int。这样你可以使用
someMapName["idPart1"]
抓住号码。'
修改强> 如果你对Enumerations没问题,那么选项2可以与std :: map完美地工作而不是字符串,键显然是你的枚举类型。
答案 3 :(得分:0)
根据您对其他答案的评论,我会说枚举是可行的方法,但我的结构有点不同。
namespace id {
enum {
part1 = 123,
part2 = 456,
part3 = 987,
...
};
}
cout << id::part1;
答案 4 :(得分:0)
使用数据库 具体来说,表格如下:
+------------------+-------------------+
| Item Name | Item Number |
+------------------+-------------------+
在内部,这可以表示为:
std::map<std::string, // The item name
unsigned int> // The number.
如果需要该号码,请使用以下名称检索:
std::map<std::string, unsigned int> index_by_name;
//...
std::string part_name = "Part0123";
unsigned int part_number = 0;
part_number = index_by_name[name];
说真的,使用数据库。查看SQLite和MySQL。