Home C&C++函数库 c++ 语法 程序源码 Linux C库

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 删除重复的值(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图