我有一个 object
用property
,这是此对象的方法所必需的:
class Object {
Property property;
}
然后我需要对这个对象进行分组。要求在这个组中只有具有唯一属性的对象。将此对象分组在 set
中是很自然的.我定义了一个 operator<
或者如果它是 unordered_set
operator==
和 hash()
.没关系。那么另一个问题出现了。我需要使用 property
在集合中找到这些对象.所以我需要创建一个 Object
类型的对象将此属性分配给它的字段。这就是我不喜欢的地方。
另一种方法是制作 map
.并复制或指向对象的属性,然后将它们用作 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;
然后我可以执行以下操作:
Object obj;
objSet.insert(obj);
objSet.find(obj.property);
你能提供一些对我有帮助的容器实现吗? boost, qt 是可以接受的。
最佳答案
Boost Multi-Index array可能是你需要的。本例 multiple sort on a single set非常符合您的需求。
typedef multi_index_container<
Object,
indexed_by<
ordered_unique<member<Object,Property,&Object::property> >
>
> object_set;
object_set oset;
Property prop;
oset.find( prop );
关于C++ set::find by 对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145342/