如何存储类似库存的数字列表?

时间:2010-04-29 20:06:11

标签: c++ list enums struct

我有一个我需要跟踪的号码列表。数字松散相关,但代表截然不同的项目。我想保留一个数字列表,但能够通过名称引用它们,以便我可以调用它们并在需要的地方轻松使用它们。有点像库存清单,其中数字都是指零件ID,我想称之为idPart1,idPart2,idPart3,因此在使用它们时,它们的目的很容易识别。

最好的方法是什么?
1)定义结构。说,库存。将包括许多int成员,part1,part2等。要使用,将创建结构的实例,分配给成员的值,并根据需要使用struct.member来使用这些数字。 2)定义枚举。使用part1,part2作为枚举文字。将实际值存储在向量或列表中,每个值都在与枚举中数字名称的值对应的索引处。使用枚举文字来检索值,列出[enumLit] 3)完全不同的东西

我不需要对这些数字做任何其他事情 - 只需每隔一段时间查看一次。由于没有处理,我认为他们的新课程是矫枉过正,但我​​愿意相信其他。

有什么建议吗?

5 个答案:

答案 0 :(得分:2)

让我试着改写一下你在这里要做的事情。您希望使用您的代码的开发人员能够引用一组预定义的数值:

  • 使用直观的名字
  • 将在编译时验证
  • 并且IDE将为代码完成而识别。

如果值在运行时不会改变,并且它们是整数值,则可以使用枚举,如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。