[英]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.