程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的vector系列--使用sort算法對vector進行排序(對vector(string)排序、使用穩定的排序std::stable_sort())

實戰c++中的vector系列--使用sort算法對vector進行排序(對vector(string)排序、使用穩定的排序std::stable_sort())

編輯:C++入門知識

實戰c++中的vector系列--使用sort算法對vector進行排序(對vector(string)排序、使用穩定的排序std::stable_sort())


寫了挺多關於vector的操作了,正好工作中遇到對vector進行排序的問題,這裡就討論一下。

直接使用sort算法,那就先了解一下:

template 
  void sort (RandomAccessIterator first, RandomAccessIterator last);
template 
  void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

Sorts the elements in the range [first,last) into ascending order.
The elements are compared using operator< for the first version, and comp for the second.
Equivalent elements are not guaranteed to keep their original relative order (see stable_sort).
也就是所說的不穩定排序。

直接上代碼:

#include      // std::cout
#include     // std::sort
#include        // std::vector
#include 

bool myfunction(int i, int j) { return (i myvector(myints, myints + 8);// 32 71 12 45 26 80 53 33

    // using default comparison (operator <)
    std::sort(myvector.begin(), myvector.begin() + 4);  //(12 32 45 71)26 80 53 33

    // using function as comp
    std::sort(myvector.begin() + 4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

    // using object as comp
    std::sort(myvector.begin(), myvector.end(), myobject);  //(12 26 32 33 45 53 71 80)

    // print out content:
    std::cout << "myvector contains:";
    for (std::vector::iterator it = myvector.begin(); it != myvector.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << '\n';
    // Sorting the string vector
    std::vector stringVec = { "John", "Bob", "Joe", "Zack", "Randy" };
    sort(stringVec.begin(), stringVec.end());

    for (std::string &s : stringVec)
        std::cout << s << " ";


    return 0;
}

//輸出:
myvector contains: 12 26 32 33 45 53 71 80
Bob Joe John Randy Zack

這個時候可以使用std::stable_sort()來實現穩定的排序了:
Sorts the elements in the range [first,last) into ascending order, like sort, but stable_sort preserves the relative order of the elements with equivalent values.

#include      // std::cout
#include     // std::stable_sort
#include        // std::vector

bool compare_as_ints(double i, double j)
{
    return (int(i) myvector;

    myvector.assign(mydoubles, mydoubles + 8);

    std::cout << "using default comparison:";
    std::stable_sort(myvector.begin(), myvector.end());
    for (std::vector::iterator it = myvector.begin(); it != myvector.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << '\n';

    myvector.assign(mydoubles, mydoubles + 8);

    std::cout << "using 'compare_as_ints' :";
    std::stable_sort(myvector.begin(), myvector.end(), compare_as_ints);
    for (std::vector::iterator it = myvector.begin(); it != myvector.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << '\n';

    return 0;
}
//輸出:
using default comparison: 1.32 1.41 1.62 1.73 2.58 2.72 3.14 4.67
using 'compare_as_ints' : 1.41 1.73 1.32 1.62 2.72 2.58 3.14 4.67

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved