gpt4 book ai didi

c++ - std::map 获取值 - 查找与手工制作的循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:35 25 4
gpt4 key购买 nike

<分区>

我有一个 std::map 对象 map<string , Property*> _propertyMap ,其中 string 是属性的名称,而 Property* 包含属性值。

我需要处理属性值并将它们转换为特定的数据格式 - 每个属性都有自己的格式,例如,如果 map 初始化如下:

_propertyMap["id"]   = new Property(Property::UUID, "12345678");
_propertyMap["name"] = new Property(Property::STRING, "name");
....

那么 "id" 的处理方式应该与 "name" 等不同。

这意味着我需要在 map 中查找每个属性并相应地处理其值。

我想到了两种方法。

一,使用std::map::find方法获取特定的属性,像这样:

map<string , Property*>::iterator it1 = _propertyMap.find("id");
if(it1 != _propertyMap.end())
{
//element found - process id values
}
map<string , Property*>::iterator it2 = _propertyMap.find("name");
if(it2 != _propertyMap.end())
{
//element found - process name values
}
....

第二步,遍历映射并为每个条目检查属性的名称并相应地进行:

for (it = _propertyMap.begin(); it != _propertyMap.end(); ++it )
{
//if it is events - append the values to the matching nodes
if (it->first == "id")
{
//process id values
}
else if (it->first == "name")
{
//process name values
}
.....
}

鉴于 Time complexity of std::map::find is O(logN) ,第一个解决方案的复杂度是 O(NlogN) 。我不确定第二个解决方案的复杂性,因为它迭代 map 一次( O(N) ),但每次迭代执行大量 if-else 。我试图用谷歌搜索常见的 map::find() 问题,但找不到任何有用的信息;他们中的大多数只需要从 map 中获取一个值,然后 find() 以更好的复杂性 (O(logN) vs O(N)) 完成这项工作。

什么是更好的方法?或者可能还有另一个我没有想到的?

另外,从代码样式上来说,哪个代码更好更清晰?

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