我需要一个可以根据结构自动排序的数据结构。
struct{
int key;
int comparisonValue(size of the vector);
}
我需要以下面的形式:
datastructure<struct, vector<int>>
如果数据结构是根据comparisonValue自动排序的,并且基于比较值的最小值,我想获取向量并向其中添加一些数据。
我可以使用哪种数据结构?我可以使用地图吗?是否有地图的自定义排序器?
如果我需要修改密钥,在这种情况下是compareValue并仍然按顺序排序,我该怎么办?
由于
答案 0 :(得分:10)
默认情况下,这会对键值进行排序,方法是使用std::less<Key>
进行比较,默认情况下会在键值上调用operator<
。因此,您可以为结构类型::
operator<
的重载
bool operator<(const Key &a, const Key &b)
{
return (a.someField < b.someField);
}
答案 1 :(得分:1)
“......并且基于比较值的最小值,我想获取向量并向其添加一些数据”
如果您的意思是想要获得整个集合中的最小元素,那么假设您只更新最小元素,那么使用std::priority_queue
可能会更好。
否则{O}查尔斯沃思的建议可能就是你所需要的std::map
。您应该查看map
的{{1}}和lower_bound()
方法。
您还应该知道STL容器保留对象的副本,因此如果您希望将更改反映到其他位置,则需要存储指向对象的指针。然后你将使用一个单独的Functor来根据它们指向的内容来比较指针。