C++ 当请求的键丢失时,是否有方法从向量映射返回std::vector ref?
快速提示:我目前没有访问此项目的C++11的权限,因此,尽管我对使用它听到任何答案感兴趣,但我无法使用任何特定于C++11的东西 我有一个管理对象集合的类。此数据存储在向量映射中,枚举对象类型作为键:C++ 当请求的键丢失时,是否有方法从向量映射返回std::vector ref?,c++,vector,reference,stl,stdmap,C++,Vector,Reference,Stl,Stdmap,快速提示:我目前没有访问此项目的C++11的权限,因此,尽管我对使用它听到任何答案感兴趣,但我无法使用任何特定于C++11的东西 我有一个管理对象集合的类。此数据存储在向量映射中,枚举对象类型作为键: std::map<MyEnum, std::vector<MyObject *> > m_objectMap; 我现在想做的是有一个函数,它接受一个枚举值并返回一个对相应向量的常量引用。我可以这样做: const std::vector<MyObject *>
std::map<MyEnum, std::vector<MyObject *> > m_objectMap;
我现在想做的是有一个函数,它接受一个枚举值并返回一个对相应向量的常量引用。我可以这样做:
const std::vector<MyObject *> &MyCollection::GetObjectsForType(MyEnum eType)
{
return m_objectMap[eType];
}
唯一的问题是,使用std::map::operator[]是非常量的,因为如果请求的枚举类型在集合中不存在,它会添加一对,这意味着此函数不能是常量。或者,如果我首先检查映射以查看它是否包含键,那么如果键不存在,我不知道返回什么,因为它必须是对某个对象的常量引用
因此,我正在寻找一种更好的方法来设计这个集合,或者一种返回空常量向量引用的方法。主要目标围绕易用性:
通过简单地按类型自动排序传入对象来添加对象的能力
能够获取给定类型的所有对象
能够查询给定类型的对象数量,即vector.size
谢谢大家! 我会这样做:
const std::vector<MyObject *> &GetObjectsForType(MyEnum eType)
{
static const std::vector<MyObject *> empty_vec;
auto it = m_objectMap.find(eType);
return it != m_objectMap.end() ? it->second : empty_vec;
}
我也会考虑使用Booo::UnQuyjpTR代替原始指针。
可以使MyObjutM映射可变。您可以返回一个特殊NA对象的引用,以指示没有值。我没有想到使用静态空列表,我喜欢这样!我以前没有使用过multimap,看起来它在这里很好用。只有一次更正;在您的第一个代码块中,我相信返回应该是it->second,而不仅仅是*it。我们有一个更健壮的共享指针类型,我只是使用原始指针来简化示例。谢谢@泰勒:很高兴这有帮助。我修好了它->第二件事。const std::vector<MyObject *> &GetObjectsForType(MyEnum eType)
{
static const std::vector<MyObject *> empty_vec;
auto it = m_objectMap.find(eType);
return it != m_objectMap.end() ? it->second : empty_vec;
}
std::pair<iterator, iterator> GetObjectsForType(MyEnum eType)
{
return m_objectMap.equal_range(eType);
}