gpt4 book ai didi

c++ - 如何将值从 NSMutableDictionary 复制到 map ?

转载 作者:行者123 更新时间:2023-11-30 02:01:08 25 4
gpt4 key购买 nike

我需要接受字符串键值对的 NSMutableDictionary,我需要复制到一个 STL 映射。有简单的方法吗?我试过了,但这不起作用。

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"10" forKey:@"6"];
[dictionary setObject:@"10" forKey:@"7"];
[dictionary setObject:@"10" forKey:@"8"];

NSEnumerator *enumerator = [dictionary keyEnumerator];
NSString *key;
while ((key = [enumerator nextObject])) {
std::string *keyString = new std::string([key UTF8String]);
std::string *valueString = new std::string([[dictionary objectForKey:key] UTF8String]);
map[*keyString] = *valueString;
}

最佳答案

你为什么要使用 new?只需将 -UTF8String 的结果直接传递给映射,它就会为您将它们转换为 std::string:

map[[key UTF8String]] = [[dictionary objectForKey:key] UTF8String];

您现有的 代码不仅无用,而且还会泄漏字符串。


您还应该放弃 NSEnumerator。多年来,我们已经有了更好的方法来枚举字典。具体来说,您可以使用快速枚举,也可以使用基于 block 的枚举。快速枚举循环如下所示:

for (NSString *key in dictionary) {
map[[key UTF8String]] = [[dictionary objectForKey:key] UTF8String];
}

基于 block 的枚举将如下所示:

// if map is a local variable it must be declared with __block
// like __block std::map<std::string,std::string> map;
// If it's static, global, or an instance or member variable, then it's fine as-is
[dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop){
map[[key UTF8String]] = [value UTF8String];
}];

在这种情况下,我建议使用快速枚举循环,因为它不需要修改 map 的声明。

关于c++ - 如何将值从 NSMutableDictionary 复制到 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com