【问题标题】:sorting vector containing addresses包含地址的排序向量
【发布时间】:2014-04-15 23:31:50
【问题描述】:

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

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

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

向量 1:

vector<Entry> table1

向量 2:

vector<Entry*> table2

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

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

【问题讨论】:

  • ...因为您希望条目的地址以相同的顺序排列。为什么从那时起你不能只返回 &table1[i] == table2[i]?

标签: c++ vector


【解决方案1】:

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

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

Live example

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

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

【讨论】:

    猜你喜欢
    • 2018-01-08
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多