gpt4 book ai didi

C++ unordered_map,高效的延迟加载和值的使用

转载 作者:太空狗 更新时间:2023-10-29 21:36:42 30 4
gpt4 key购买 nike

我想使用延迟加载 unordered_map。我在 map 上搜索 key 。如果存在,我使用该值。如果它不存在,我创建值并放置键值对。

我想避免最后一个 map.find() 语句——它应该是一个不必要的操作(性能很重要)。它可能会失败 :-( 我希望有更好的解决方案。

注意:调用例程应该只有对值的 const 引用。避免在调用例程中实例化值。

我怎样才能避免第二次查找并将范围适当的 const 引用返回给调用者?

文件

`    typedef std::vector DataPtrListVector;    struct DataCacheStruct    {        DataPtrListVector dataItemOne;    };    typedef boost::unordered_map DataCacheMap;    // declare instance variable    DataCacheMap dataCacheMap;    // declare function    const DataCacheStruct& getOrCreateData( const std::string& dataKey,... );`

cpp文件

`    // Lazy Load of DataStruct unordered_map    std::string key = someString;    const DataCacheStruct& dataStruct = getOrCreateData( key, ... );    //    const DataCacheStruct& class::getOrCreateData( const std::string key, ...)    {        DataCacheMap::const_iterator itData = dataCacheMap.find(key);        if (itData != dataCacheMap.end())        {            return itData->second;        }        DataCacheStruct newData = doSomethingSlow();        dataCacheMap.emplace(std::make_pair(key, newData));        // Now I want to return newData as a const reference, as per unordered_map        // but it goes out of scope before the calling routine can use it.        DataCacheMap::const_iterator itData = dataCacheMap.find(key);        return itData->second;    }`

最佳答案

正如我已经说过的,方法 emplace , 返回一对指向新插入元素的迭代器和一个真值。

您可以简单地使用该迭代器来获取引用:

auto it_new_insertion = dataCacheMap.emplace(std::make_pair(key, newData));
if (it_new_insertion.second == false) {
// something wrong with memory. handle it
}
return it_new_insertion.first->second;

关于C++ unordered_map,高效的延迟加载和值的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545337/

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