std::
list::sort
公众成员函数 <list>
1) |
void sort(); |
(2) |
template <class Compare>
void sort (Compare comp); |
对容器中的元素进行排序
对列表中的元素进行排序,改变它们在容器中的位置。
排序是通过应用运算符< (version(1))或comp (version(2))来比较元素来执行的。
这种比较将产生元素的严格弱排序(即,不考虑自反性的一致传递比较)。
结果等价元素的顺序是稳定的:即,等价元素保持它们在调用之前的相对顺序。
整个操作不涉及任何元素对象的构造、销毁或复制。元素在容器内移动。
☲ 参数
-
comp
-
二元谓词,接受列表中包含的两个相同类型的值,
如果第一个参数按照它定义的严格弱顺序排在第二个参数之前,
则返回true,否则返回false。
这应该是一个函数指针或函数对象。
☉ 返回值
none
☣ 示例
// list::sort
#include <iostream>
#include <list>
#include <string>
#include <cctype>
// comparison, not case sensitive.
bool compare_nocase (const std::string& first, const std::string& second)
{
unsigned int i=0;
while ( (i<first.length()) && (i<second.length()) )
{
if (tolower(first[i])<tolower(second[i])) return true;
else if (tolower(first[i])>tolower(second[i])) return false;
++i;
}
return ( first.length() < second.length() );
}
int main ()
{
std::list<std::string> mylist;
std::list<std::string>::iterator it;
mylist.push_back ("one");
mylist.push_back ("two");
mylist.push_back ("Three");
mylist.sort();
std::cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
mylist.sort(compare_nocase);
std::cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
} |
对于默认字符串,比较是严格的字符代码比较,其中所有大写字母比较都小于所有小写字母,
在第一次排序操作中,将所有以大写字母开头的字符串放在前面。
使用函数compare_nocase,比较将不区分大小写。
输出:
mylist contains: Three one two
mylist contains: one Three two
✥ 复杂度
近似为NlogN,其中N是容器的大小。
☣ 迭代器的有效性
不变
⇄ 数据竞争
容器修改。
访问所有包含的元素(但不修改)。同时遍历容器是不安全的。
☂ 异常安全性
基本保证:如果抛出异常,则容器处于有效状态。
如果任何元素的比较或移动操作抛出,则抛出。
🍄 另请参阅
list::merge |
合并已排序的容器(公众成员函数) |
list::reverse |
颠倒元素的顺序(公众成员函数) |
list::unique |
删除重复的值(公众成员函数) |