排序包含地址的向量

时间:2014-04-15 23:31:51

标签: c++ vector

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

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

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

向量1:

vector<Entry> table1

向量2:

vector<Entry*> table2

我希望能够通过table1中项目的id对table2进行排序。

我该怎么做呢? 我只是尝试使用sort函数..但那不起作用,因为我认为它只是按地址排序..这不是我想要的..

1 个答案:

答案 0 :(得分:1)

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

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

Live example

如果你的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; });

Live example