【问题标题】:std::map kind of implementation in LuaLua 中的 std::map 类实现
【发布时间】:2016-11-21 09:46:16
【问题描述】:

我有std::map,其中包含与键关联的值列表。实际实现包含许多这样的 Key。 Lua Table 实现中是否有类似的方法可以为特定键保存多个值。如果是这样,如何从该表中写入和读取。

我推荐了How do I create a Lua Table in C++, and pass it to a Lua function? 我只能访问我的 C++ 代码中的设置和获取值,该代码编写得更通用,不能在 C++ 中创建表。 (第三方 C++ 代码)。

我所拥有的只是我可以使用

luaState = luaL_newstate(); lua_register(luaState, "getValue", get_value); lua_register(luaState, "setValue", set_value);

C++ 代码有类似的东西

typedef std::set<const char *> TValueNames;
std::map<const char *, TValueNames> keyValueList;

通过参考 Lua 文档,我了解到我可以创建一个以 Key 作为索引的表,并将值作为其数据。但我需要知道如何为一个键分配多个值(数据)。 https://www.lua.org/pil/2.5.html

示例 lua 脚本实现是这样的,

local keyType = getValue("KeyType");
local Key = getValue("Key");
local Value = getValue("Value");
KeyValueTable = {}
KeyValueTable[Key] = Value;

我需要创建一些可以保存信息的东西,例如,

["Key1"] = {"Value1,Value2,Value3"};
["Key2"] = {"Value2,Value3,Value4,Value5"};

【问题讨论】:

  • 您需要 LUA 还是 C++ 中的表。在 C++ 中,您可以查看 std::multimap
  • 我需要 Lua 中的表,它可以保存类似于 C++ 中的 std::map
  • @kar: std::map 不能为每个键保存多个值。只有std::multimap 可以这样做。您的 keyValueList 仍然只持有一个值。只是这个值恰好是一个容器,它本身包含了多个东西。但是map 本身只持有一个对象。

标签: dictionary lua lua-table


【解决方案1】:

如您所知,Lua 表中的键只能引用一个值,但您可以轻松地使该值成为一个包含多个值的表。为了更忠实地表示 C++ 结构中的set,我们可以将值变成内表中的键。

local function setValue(self, key, value)
  self[key] = self[key] or {}
  self[key][value] = true
end

local function removeValue(self, key, value)
  if type(self[key]) == 'table' then
    self[key][value] = nil
  end
end

local function checkValue(self, key, value)
  if type(self[key]) == 'table' then
    return self[key][value]
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多