我正在使用以下代码从我的游戏的plist中读取数据:

int levelNum = SOME_VALUE_FROM_OUTSIDE;

ValueMap mapFile = FileUtils::getInstance()->getValueMapFromFile("LevelDetails.plist");

std::string strLevel = std::to_string(levelNum);

ValueMap mapLevel = mapFile.at(strLevel).asValueMap();

LevelDetails.plist是一个以字典为根的plist。问题是在某些情况下可能没有名为levelNum / strLevel的键。因此,在运行此行之前,我必须检查密钥是否存在:
ValueMap mapLevel = mapFile.at(strLevel).asValueMap(); //Throws exception occasionally

那么检查名为levelNum / strLevel的键是否存在的正确方法是什么?

最佳答案

由于ValueMap是std::unordered_map,因此可以使用该类中的方法:

if (mapFile.count(strLevel).count() > 0) {
    ValueMap mapLevel = mapFile.at(strLevel).asValueMap();
}

在cocos2d-x中ValueMap的声明是:
typedef std::unordered_map<std::string, Value> ValueMap;

07-24 21:21