⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort1.txt

📁 这是一些STL的学习程序,是我以前学习STL时编写的,适合初学STL的人!有兴趣的可以下载下来看一看!
💻 TXT
字号:
经过一段时间郁闷后,今天终于把sort的用法弄清楚了!顺便在这里总结一下,这样也可以帮助还在为sort发愁的朋友!:)
   通过查找帮助文档,我们可以发现sort在algorithm头文件中是这样定义的:    template<class RandomAccessIterator>
   void sort(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last
   );
template<class RandomAccessIterator, class Pr>
   void sort(
      RandomAccessIterator _First, 
      RandomAccessIterator _Last, 
      BinaryPredicate _Comp
   );
从以上定义中我们可以发现sort是一个模板函数,而且只能用于内容可随机访问的元素类型,如:数组、向量等。而且我们可以发现第一个类型的sort函数接受两个迭代器,而第二个类型的sort函数除了接受连个迭代器外,还接受一个函数对象,这个函数对象是用来比较前面由迭代器所引用到的值得大小,这样来确定排列顺序的。
如果我们定义了一个整形或字符串类型向量的话,且我们想对其中元素排序的话,那么我们就可以利用第一种类型的sort函数。eg:
    vector<int> intVector;
    vector<int>::iterator first;
    vector<int>::iterator last;
    intVector.push_back(7); 
    intVector.push_back(2);
    ....
    first = intVector.begin();
    last  = intVector.end();
    sort(first, last);
当然以上只是简单类型,所以我们无须使用第二种类型的sort函数。(注意如果我们对字符串排序时,系统默认使用的“<”排序方法不符我们要求时,我们就需要使用第二种类型的sort函数了,而且需要定义自己的函数对象)
    但是如果我们在向量中存储了结构体或对象时,如果我们还需对这些元素使用sort方法,我们该如何使用呢?这里举一个例子:
   typedef struct{
       string   sdName; // student name
       int      ssn;    // social security number
   }sdstruct;
   
   // 构建一个符合我们要求的函数对象
   class Compare
   {
    public:
          // 注意下面的const一定不能少
          bool operator() (const sdstruct& sd1, const sdstruct& sd2)
          {
              if (sd1.sdName < sd2.sdName)
              {
                  return true;
              }
              else 
              {
                  return false;
              }
          }
   };
   vector<sdstruct> sdVector;
   vector<sdstruct>::iterator first;
   vector<sdstruct>::iterator last;
   sdstruct         sd;
   sd.sdName = "张三丰";
   sd.ssn    = 1234;
   sdVector.push_back(sd);
   sd.sdName = "周不通";
   sd.ssn    = 2345;
   sdVector.push_back(sd);
   ... 
  // 这时我们就可利用以下方法对sdVector中的元素进行排序了
  first = sdVector.begin();
  last  = sdVector.end();
  sort(first, last, Compare()); // 注意这里的Compare()为一个匿名的类对象
                                // 目的是为了构建一个函数对象
 
  好了到此已经介绍完了!希望大家以后能对sort不再有恐惧感!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -