C++ 插入时对对象进行排序(如果存在相同的对象,则添加数据)
我有个小问题,不知道怎么处理 我有一个名为Person的结构:C++ 插入时对对象进行排序(如果存在相同的对象,则添加数据),c++,sorting,vector,C++,Sorting,Vector,我有个小问题,不知道怎么处理 我有一个名为Person的结构: struct Person { string name; vector <string> address; }; struct-Person { 字符串名; 矢量地址; }; 我还有这些结构的向量 vector<Person> people; 矢量人; 我需要: 在人物向量中按姓名对人物进行排序(升序),但如果向量中存在同名人物,则将其添加到另一个地址(address.push_bac
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可能效率不高,因为您希望进行插入和重新分配,这可能会非常昂贵,具体取决于数据的大小。为什么不使用例如?以姓名为键,以
人
为数据?