C++使用STL中的sort對std的vector,list等容器進行排序
阿新 • • 發佈:2021-01-25
std的sort函式可以對vector、list等容器進行排序,兩者使用方法基本一致,這裡以vector為例說明;
主要介紹3點:
1.使用簡單型別排序;
2.使用自定義資料結構排序;
3.使用Lambda排序;
1.使用簡單型別排序,這個比較簡單;
std::vector<int> vec = { 9,5,7,8,4,1,2,6,3,10 }; std::cout << "int sort before:" << std::endl; for each (const auto& var in vec) std::cout << var << " "; std::sort(vec.begin(), vec.end()); std::cout << "\nsort after:" << std::endl; for each (const auto& var in vec) std::cout << var << " ";
輸出如下:
2.使用自定義資料結構排序,此時要麼使用第三種方法,使用Lambda表示式,要麼過載 < 符號即可:
自定義資料結構:
struct MyNode
{
int _value;
MyNode(int value)
:_value(value){};
bool operator<(const MyNode& other) const
{
return _value < other._value;
}
};
過載了 < 符號就和上面 int 型別一樣使用就可以排序:
std::vector<MyNode> vecNode; vecNode.emplace_back(MyNode(9)); vecNode.emplace_back(MyNode(5)); vecNode.emplace_back(MyNode(7)); vecNode.emplace_back(MyNode(8)); vecNode.emplace_back(MyNode(4)); vecNode.emplace_back(MyNode(1)); vecNode.emplace_back(MyNode(2)); vecNode.emplace_back(MyNode(6)); vecNode.emplace_back(MyNode(3)); vecNode.emplace_back(MyNode(10)); std::cout << "\nMyNode sort before:" << std::endl; for each (auto& var in vecNode) std::cout << var._value << " "; std::sort(vecNode.begin(), vecNode.end()); std::cout << "\nMyNode sort after:" << std::endl; for each (auto& var in vecNode) std::cout << var._value << " ";
輸出如下:
3.使用Lambda排序;
使用Lambda排序;
std::cout << "\nLambda sort before:" << std::endl; for each (auto& var in vecNode) std::cout << var._value << " "; std::sort(vecNode.begin(), vecNode.end(), [&](MyNode node1, MyNode node2) { return node1._value < node2._value; }); std::cout << "\nLambda sort after:" << std::endl; for each (auto& var in vecNode) std::cout << var._value << " ";
輸出如下: