【发布时间】:2017-03-22 00:15:59
【问题描述】:
假设我有vector<People*> Population
class People {
string name;
string city;
int id;
};
我想先按name排序,然后按city排序,例如:
Anna, Alabama, 1284
Anna, New York, 8377
Daniel, Sydney, 8332
Peter, Alabama, 6392
Peter, Munich, 5590
我想我先按name 排序,然后在name 中按city 排序,然后再转到下一个name。
还有更好的方法吗?
【问题讨论】:
-
你可以一次性排序,只要你使用一个前提条件,同时考虑两个字段。
-
您为什么使用
vector<People*>而不是vector<People>? -
如果我理解正确,为了排序,最好有一个指针向量,这样我就不必移动整个对象而只需交换指针。
-
@HichigayaHachiman -- 最好有另一个索引向量,而不是指针,然后交换索引。指针增加了您不需要进入的另一个级别的复杂性。
-
此外,指针通常会导致内存分散在它来自的任何池中,而不是在一个不错的连续块中,从而剥夺了使
vector在现代处理器上闪电般快速的缓存和预测优势。无论你从使用指针的快速排序中获得什么优势,都会很快被迭代时增加的成本所消耗。类似于链表的情况。