STL数据结构与排序

时间:2010-11-04 11:20:56

标签: c++ stl

我需要一个可以根据结构自动排序的数据结构。

struct{
  int key;
  int comparisonValue(size of the vector);
}

我需要以下面的形式:

datastructure<struct, vector<int>>

如果数据结构是根据comparisonValue自动排序的,并且基于比较值的最小值,我想获取向量并向其中添加一些数据。

我可以使用哪种数据结构?我可以使用地图吗?是否有地图的自定义排序器?

如果我需要修改密钥,在这种情况下是compareValue并仍然按顺序排序,我该怎么办?

由于

2 个答案:

答案 0 :(得分:10)

来自STL的

std::map

默认情况下,这会对键值进行排序,方法是使用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来根据它们指向的内容来比较指针。