【发布时间】:2010-06-21 12:20:35
【问题描述】:
STL 和 Vector 是否提供默认排序选项?
【问题讨论】:
-
什么是“默认排序选项”?
标签: c++ list sorting stl vector
STL 和 Vector 是否提供默认排序选项?
【问题讨论】:
标签: c++ list sorting stl vector
vector 类没有 sort 函数。
但是有一个sort 可以在所有迭代器范围内工作。 vector 确实公开了迭代器。
对向量进行排序vec:
#include <algorithm>
std::sort(vec.begin(), vec.end());
【讨论】:
list有一个成员函数sort,有序的关联容器已经排序,无序的关联容器无法排序。
是的,stl 算法中有sort()。你应该看看http://www.cplusplus.com/reference/algorithm/sort/
【讨论】:
std::sort(vec.begin(),vec.end(),std::greater<int>());,见<algorithm>和<functional>
你可能想要std::sort。
#include <algorithm>
#include <vector>
int
main()
{
std::vector<int> foo;
std::sort( foo.begin(), foo.end() );
return 0;
}
下面是使用两个 boost 库的类似示例。
#include <boost/assign/list_of.hpp>
#include <boost/foreach.hpp>
#include <algorithm>
#include <iostream>
#include <vector>
int
main()
{
std::vector<int> foo = boost::assign::list_of(1)(4)(5)(10)(3)(2);
std::cout << "unsorted" << std::endl;
BOOST_FOREACH( const int i, foo ) {
std::cout << i << std::endl;
}
std::sort( foo.begin(), foo.end() );
std::cout << "sorted" << std::endl;
BOOST_FOREACH( const int i, foo ) {
std::cout << i << std::endl;
}
return 0;
}
【讨论】:
std::sort 示例可能有点多问。
std::sort( beginIndex, endIndex ) 行就足够了 - 但它们几乎没有“要求读者熟悉两个 Boost 库”。
正如其他人在回答中提到的那样,有 std::sort 功能。
但是,通过“默认排序选项?”。你的意思是你想对一个向量进行排序,其中 T 是你定义的一个类。在这种情况下,你必须在你的类中实现“operator
例如,
class Foo
{
public :
Foo();
~Foo();
private :
int c;
};
std::vector<Foo> foovec;
std::sort(foovec.begin(), foovec.end());
为确保上面的“std::sort”行正常工作,您需要在 Foo 中定义“operator
class Foo
{
public :
Foo();
~Foo();
bool operator<(const Foo& rFoo) const;
private :
int c;
};
bool Foo::operator<(const Foo& rFoo) const
{
return(c < rFoo.c);
}
【讨论】: