【发布时间】:2013-02-28 20:47:50
【问题描述】:
我有一个object 和一个property,这是该对象的方法所必需的:
class Object {
Property property;
}
然后我需要对这个对象进行分组。要求在该组中只有具有唯一属性的对象。在set 中分组这些对象是很自然的。我定义了一个operator< 或者如果它是unordered_set operator== 和hash()。没关系。然后另一个问题出现了。我需要使用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;
那么我可以做到以下几点:
Object obj;
objSet.insert(obj);
objSet.find(obj.property);
你能提供一些对我有帮助的容器实现吗? boost,qt 都可以接受。
【问题讨论】:
-
operator<是如何定义的?它是否使用property作为主要标准? -
是
operator<,operator==,hash()仅使用property字段。 -
这正是Boost.MultiIndex的用途。
标签: c++ qt boost map unordered-map