C++ 在结构中显式存储项

C++ 在结构中显式存储项,c++,qt,struct,C++,Qt,Struct,我想创建一个文件,其中包含我需要在程序中使用的所有密钥对。但是,我认为最好将它嵌入到代码中,所以我想将它放在一个结构中。例如,如何将这些项显式地放在结构中 {Qt::Key_0, "Win1"}, {Qt::Key_1, "Win2"}, {Qt::Key_2, "Win3"}, {Qt::Key_3, "Win4"}, {Qt::Key_4, "Win5"}, {Qt::Key_5, "Win6"}, {Qt::Key_6, "Win1"}, {Qt::Key_7, "Win7

我想创建一个文件,其中包含我需要在程序中使用的所有密钥对。但是,我认为最好将它嵌入到代码中,所以我想将它放在一个结构中。例如,如何将这些项显式地放在结构中

 {Qt::Key_0, "Win1"},
 {Qt::Key_1, "Win2"},
 {Qt::Key_2, "Win3"},
 {Qt::Key_3, "Win4"},
 {Qt::Key_4, "Win5"},
 {Qt::Key_5, "Win6"},
 {Qt::Key_6, "Win1"},
 {Qt::Key_7, "Win7"},
 {Qt::Key_8, "Win3"},
 {Qt::Key_9, "Win5"}

如何访问这些项目?

只需声明结构并初始化它:

const struct
{
  Qt::Key mKey;
  const char* mKeyName;
} key_names[] = {
 {Qt::Key_0, "Win1"},
 {Qt::Key_1, "Win2"},
 {Qt::Key_2, "Win3"},
 {Qt::Key_3, "Win4"},
 {Qt::Key_4, "Win5"},
 {Qt::Key_5, "Win6"},
 {Qt::Key_6, "Win1"},
 {Qt::Key_7, "Win7"},
 {Qt::Key_8, "Win3"},
 {Qt::Key_9, "Win5"}
};
在这里,我假设
Qt::Key_0
等值是该类型的值,考虑到您的使用情况,这似乎是合理的。如果需要在某个地方引用结构类型本身,还需要给它一个结构标记(=C++中的类名);为了简洁起见,我省略了那个

访问权限与任何其他阵列类似:

for(size_t i = 0; i < sizeof key_names / sizeof *key_names; i++)
{
  printf("the key value %u is mapped to the name '%s'\n",
      (unsigned int) key_names[i].mKey,
      key_names[i].mKeyName);
}
for(大小i=0;i
只需声明结构并初始化它:

const struct
{
  Qt::Key mKey;
  const char* mKeyName;
} key_names[] = {
 {Qt::Key_0, "Win1"},
 {Qt::Key_1, "Win2"},
 {Qt::Key_2, "Win3"},
 {Qt::Key_3, "Win4"},
 {Qt::Key_4, "Win5"},
 {Qt::Key_5, "Win6"},
 {Qt::Key_6, "Win1"},
 {Qt::Key_7, "Win7"},
 {Qt::Key_8, "Win3"},
 {Qt::Key_9, "Win5"}
};
在这里,我假设
Qt::Key_0
等值是该类型的值,考虑到您的使用情况,这似乎是合理的。如果需要在某个地方引用结构类型本身,还需要给它一个结构标记(=C++中的类名);为了简洁起见,我省略了那个

访问权限与任何其他阵列类似:

for(size_t i = 0; i < sizeof key_names / sizeof *key_names; i++)
{
  printf("the key value %u is mapped to the name '%s'\n",
      (unsigned int) key_names[i].mKey,
      key_names[i].mKeyName);
}
for(大小i=0;i
您可以(几乎)将该代码块用作数组初始值设定项。

您可以(几乎)将该代码块用作数组初始值设定项。

选项1:

选项2:

#包括
#包括
使用名称空间boost::assign
std::map myMap;
int main()
{
myMap+=(键1,val1)(键2,val2)(等);
}
选项3:

只需选择您想要的任何数据结构(我投票选择std::map),然后手动将条目插入到某个Init()函数中。

选项1:

选项2:

#包括
#包括
使用名称空间boost::assign
std::map myMap;
int main()
{
myMap+=(键1,val1)(键2,val2)(等);
}
选项3:


只需选择您想要的任何数据结构(我投票选择std::map)并手动将条目插入某个Init()函数中。

我不确定这会有多大帮助,但如果在函数范围中使用此数组,那么将其设置为
静态
@Owen:就像其他数组一样。我不确定它会有多大帮助,但是如果在函数范围中使用这个数组,那么将其设置为
静态
@Owen:与任何其他数组一样可能会有好处。