包含地址的排序向量

sorting vector containing addresses

本文关键字:向量 排序 地址 包含      更新时间:2023-10-16

我有一个名为Entry的结构,它包含两个字符串和一个int:

struct Entry
{ 
    string id, name; 
    int age; 
};

我有一个向量包含一堆Entry,另一个向量在第一个向量中包含Entry的地址。

矢量1:

vector<Entry> table1

矢量2:

vector<Entry*> table2

我希望能够根据表1中项目的id对表2进行排序。

我该怎么做?我试着简单地使用排序函数。。但这不起作用,因为我认为这只是按地址排序。。这不是我想要的。。

您可以将自定义比较器传递给std::sort:

std::sort(table2.begin(), table2.end(), [](Entry* a, Entry* b) {
    return a->id < b->id;
});

实时示例

如果对于Entry类,operator<是有意义的,那么重载它并减少比较器的主体可能是个好主意:

bool operator<(Entry const& a, Entry const& b) {
    return a.id < b.id;
}
// …
std::sort(table2.begin(), table2.end(), [](Entry* a, Entry* b) { return *a < *b; });

实时示例