Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 插入时对对象进行排序(如果存在相同的对象,则添加数据)_C++_Sorting_Vector - Fatal编程技术网

C++ 插入时对对象进行排序(如果存在相同的对象,则添加数据)

C++ 插入时对对象进行排序(如果存在相同的对象,则添加数据),c++,sorting,vector,C++,Sorting,Vector,我有个小问题,不知道怎么处理 我有一个名为Person的结构: struct Person { string name; vector <string> address; }; struct-Person { 字符串名; 矢量地址; }; 我还有这些结构的向量 vector<Person> people; 矢量人; 我需要: 在人物向量中按姓名对人物进行排序(升序),但如果向量中存在同名人物,则将其添加到另一个地址(address.push_bac

我有个小问题,不知道怎么处理

我有一个名为Person的结构:

struct Person
{
    string name;
    vector <string> address;
};
struct-Person
{
字符串名;
矢量地址;
};
我还有这些结构的向量

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

如果这是一个家庭作业,那么我认为您需要实现一些算法,而不是使用复杂的数据结构来“自动”排序

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

binarySearch的Java实现正是这样做的——它返回插入点——一个特殊的值,可以转换为数组中插入新元素的位置,仍然保持“sorted”属性

在C++中,你必须自己实现它。类似这样的内容:


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

您需要使用排序数据结构,如std::map(二进制搜索树)。这将使您的数据保持排序,并且插入/查询的时间复杂性为O(logn)

有关支持的操作,请参阅

Vector可能效率不高,因为您希望进行插入和重新分配,这可能会非常昂贵,具体取决于数据的大小。

为什么不使用例如?以姓名为键,以
为数据?