插入时排序对象(如果存在则添加数据)

时间:2015-04-03 16:29:21

标签: c++ sorting vector

我有一点问题而且不知道如何处理它。

我有一个名为Person的结构:

struct Person
{
    string name;
    vector <string> address;
};

我也有这些结构的载体。

vector<Person> people;

我需要: 按人物矢量(升序)中的名称对进行排序,但如果矢量中存在同名人物,则添加另一个地址(address.push_back(地址);)。 我需要在插入时将新的Person对象(或添加地址)放在正确的位置(不要在插入后对向量进行排序)。

2 个答案:

答案 0 :(得分:0)

如果这是一个家庭作业,那么我认为你应该实施一些算法,而不是使用复杂的数据结构,这将自动排序&#39;。

以下是线索:如果我们要搜索的元素在向量中不存在,那么二进制搜索算法将停在新元素所属的位置。

binarySearch的Java实现就是这样 - 它返回插入点 - 一个特殊的值,可以转换到数组中的位置,在这里应插入新元素,同时保持&#39;排序&#39;

在C ++中,你必须自己实现它。这样的事情:Binary search to find the range in which the number lies

可以尝试使用std :: lower_bound()重新实现Java行为。

答案 1 :(得分:0)

您需要使用类似std :: map(二叉搜索树)的排序数据结构。这将使您的数据保持排序,插入/查询将具有时间复杂度O(log n)。

有关支持的操作,请参阅std::map

Vector可能效率不高,因为您想要进行插入,并且根据数据的大小,重新分配会变得非常昂贵。