我可以将一个lua#u表放在另一个表中,通过C+构建多维数组吗+;? 我的游戏我试图通过C++完成以下数组结构,因为数据来自外部源,应该在LuaScript脚本中可用。

我可以将一个lua#u表放在另一个表中,通过C+构建多维数组吗+;? 我的游戏我试图通过C++完成以下数组结构,因为数据来自外部源,应该在LuaScript脚本中可用。,c++,arrays,lua,lua-table,C++,Arrays,Lua,Lua Table,数组结构应该是这样的:(数据在一个映射中,映射包含变量的名称和对的列表(每对都是一个键值对,被认为是一个子数组中的一个元素) 地图上准备的数据是完整的,结构也完全正确。 所以基本上我有 typedef std::map<std::string, std::list<std::pair> >; /\index(e.g: sword) /\ /\ ||

数组结构应该是这样的:(数据在一个映射中,映射包含变量的名称和对的列表(每对都是一个键值对,被认为是一个子数组中的一个元素)

地图上准备的数据是完整的,结构也完全正确。 所以基本上我有

typedef std::map<std::string, std::list<std::pair> >;
                  /\index(e.g: sword) /\       /\
                                      ||       ||
                                      ||    Pair: Contains two strings (key/value pair)
                                      ||
                                      List of Pairs for each array
到目前为止,我得到的是:

for(ArrayMap::iterator it = this->npc->arrayMap.begin(); it != this->npc->arrayMap.end(); it++) {
    std::string arrayName = (*it).first;
    if((*it).second.size() > 0) {
        lua_newtable(luaState);
        for(ArrayEntryList::iterator itt = (*it).second.begin(); itt != (*it).second.end(); itt++) {
            LuaScript::setField(luaState, (*itt).first.c_str(), (*itt).second.c_str());
        }
        lua_setglobal(luaState, arrayName.c_str());
    }
}
但这只会生成以下结构:

(table)
[item_id] = (string) 2000
[name] = (string) sword
[price] = (string) 500
问题是这个表当然只能包含每个索引一次。 这就是为什么我需要“一张桌子中的一张桌子”,这可能吗


有没有办法做到这一点?我很高兴得到任何提示。

据我所知,如果你有两把“剑”,那么您就不能存储第二个了?如果是这样的话,您就错了。map的键应该是唯一的,如果您决定使用
std::map
来存储您的项目,那么您的外部源应该提供唯一的键。我在上一个游戏中使用了
std::string
作为键。示例:

"WeakSword" -> { some more data }
"VeryWeakSword" -> { some more data }
或者,使用您的数据(假设项_id是唯一的),您可以从外部来源获得如下信息:

1294 -> { some more data }
1678 -> { some more data }
我不确定这有多高效,但我没有编写一个硬件需求旺盛的3D前沿游戏,所以它做得很好

您正在使用的数据结构还取决于您将如何使用它。例如,如果您总是迭代此结构,为什么不按如下方式存储:

class Item {public: ... private: std::string name; int id; int value;}
std::vector<Item> items // be careful tho, std::vector copies item before it pushes
类项{public:…private:std::string name;int id;int value;}
std::vector items//小心,std::vector会在推送项之前复制它
提取(或解析?)您希望从外部源中的每个实体获得实际值,并将其存储在
std::vector
中。到达
std::vector
中间是昂贵的,但是,如果您的意图不是即时访问而是迭代数据,为什么要使用map?但是,如果您的意图实际上是到达特定的键/值对,您应该过滤外部数据并使用唯一密钥


最后,还有另一个关联容器,它存储非唯一的键/值对,名为
std::multimap
,但我真的怀疑您是否真的需要它。

Hmm我想您弄错了,或者我解释错了。项名称和ID是唯一的,但我需要为每个表字段分配一个数组,而不是单个值,因为each项可以有可选的数据量。std::map,其中Properties是可以创建的结构,用于存储一些数据,key是名称(或者可以将其设为id,在这种情况下key是int)。根据您的示例,您可以创建一个属性结构/类,该属性结构/类包含可变数量的字段,如int id、std::vector prices/costs等。
class Item {public: ... private: std::string name; int id; int value;}
std::vector<Item> items // be careful tho, std::vector copies item before it pushes