use*_*416 1 c++ qt boost unordered-map map
我有一个objecta property,这是该对象的方法所必需的:
class Object {
Property property;
}
Run Code Online (Sandbox Code Playgroud)
然后我需要对这个对象进行分组.要求在该组中只有具有唯一属性的对象.将这些对象分组是很自然的set.我定义了一个operator<或者它是否unordered_set operator==和hash().没关系.然后出现另一个问题.我需要在set中找到这个对象property.所以我需要创建一个类型的对象,Object将该属性赋值给它的字段.这就是我不喜欢的地方.
另一种方法是制作一个map.并复制或指向对象的属性,然后将它们用作地图中的键.我认为这也是一项双重工作.
我想要类似的东西set,但有能力使搜索不使用整个对象,但使用对象的属性来查找它.例如,我定义以下内容:
class Object {
Property property;
bool operator<(Object obj) { return property < obj.property; }
bool operator<(Property obj) { return property < obj.property; }
};
some::set<Object> objSet;
Run Code Online (Sandbox Code Playgroud)
然后我可以做以下事情:
Object obj;
objSet.insert(obj);
objSet.find(obj.property);
Run Code Online (Sandbox Code Playgroud)
你可以提供一些容器的实现来帮助我吗?提升,qt是可以接受的.
Boost Multi-Index数组可能就是您所需要的.这个示例在单个集合上进行多次排序非常匹配您正在寻找的内容.
typedef multi_index_container<
Object,
indexed_by<
ordered_unique<member<Object,Property,&Object::property> >
>
> object_set;
object_set oset;
Property prop;
oset.find( prop );
Run Code Online (Sandbox Code Playgroud)