我有一点问题而且不知道如何处理它。
我有一个名为Person的结构:
struct Person
{
string name;
vector <string> address;
};
我也有这些结构的载体。
vector<Person> people;
我需要: 按人物矢量(升序)中的名称对人进行排序,但如果矢量中存在同名人物,则添加另一个地址(address.push_back(地址);)。 我需要在插入时将新的Person对象(或添加地址)放在正确的位置(不要在插入后对向量进行排序)。
答案 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可能效率不高,因为您想要进行插入,并且根据数据的大小,重新分配会变得非常昂贵。