簡體   English   中英

使用std :: multimap迭代器創建std :: list

[英]Create std::list with std::multimap iterators

我有以下功能:

std::list<std::shared_ptr<Object>> AnimalManager::GetObjectsOfType(std::string type)
{    
    std::pair <std::multimap<std::string, std::shared_ptr<Object>>::iterator, std::multimap<std::string, std::shared_ptr<Object>>::iterator> ret;
    ret = m_objects.equal_range(type);

    std::list<std::shared_ptr<Object>> objectsOfType(ret.first, ret.second);

    return objectsOfType;
}

我正在創建一個包含一系列迭代器的列表,但出現錯誤。 由於multimap中的迭代器,我是成對的,而list中的元素是唯一的。 但是我不想迭代思想的迭代器,因為我將失去使用std::multimap而不是使用O(1)插入但使用O(n)查找的其他數據結構的好處。

是否可以按我的意願創建列表? 如果使用其他設計模式或數據結構會更好嗎?

您需要什么std::transform transform將范圍轉換為另一個范圍。 利用lambda,您可以構建如下列表

std::list<std::shared_ptr<Object>> AnimalManager::GetObjectsOfType(std::string type)
{    
    auto ret = m_objects.equal_range(type);

    std::list<std::shared_ptr<Object>> objectsOfType;
    std::transform((ret.first, ret.second, std::back_inserter(objectsOfType),
                   [](const auto& pair){ return pair.second; });

    return objectsOfType;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM