2012-05-28 33 views
2

我正在寻找一种使用STL的sort()函数对算法库进行排序的方法:算法库。 我找到了几个使用矢量的代码来做到这一点。例如使用STL对结构进行排序:算法

struct person { 
    std::string name; 
    int age; 
}; 
bool sort_by_name(const person & lhs, const person & rhs) 
{ 
    return lhs.name < rhs.name; 
} 
bool sort_by_age(const person & lhs, const person & rhs) 
{ 
    return lhs.age < rhs.age; 
} 
int main() { 
    std::vector<person> people; 
    // fill in the vector 
    std::sort(people.begin(), people.end(), sort_by_name); 
    std::sort(people.begin(), people.end(), sort_by_age); 
} 

我想知道是否可以在不使用矢量的情况下进行排序?如果是的话那怎么样?

+0

您可以对数组或其他容器进行排序,如'deque'或'list'。 – HighCommander4

+0

如何排序结构?你总是可以排序集合 – Jeeva

+0

可能的重复[如何使用std :: sort与结构的矢量和比较函数?](http://stackoverflow.com/questions/328955/how-to-use-stdsort-with -a-vectors-of-structures-and-compare-function) – dirkgently

回答

3

std::sort算法接受3个参数:

  • 随机存取迭代到初始位置。
  • 随机访问迭代器的最终位置和
  • 排序标准

所以只要你有任何类型可提供最初和最后的迭代器和您提供的分类标准,您可以在该类型上使用std::sort
重要的是,虽然排序标准有严格弱排序

+0

我认为这仍然适用于正常的数组,尽管实际上并不是随机访问迭代器。这是真的,还是只与其他东西兼容? – chris

+4

@chris:指针*是一个随机访问迭代器。 (当传递给函数时,数组名称衰减为指向数组第一个元素的指针) – HighCommander4

+0

@ HighCommander4,哦,我的不好。我并没有真正深入迭代器本身,我只是用它们。感谢免费的知识。 – chris

相关问题