C++ 中使用 vector 进行局部排序

C++ 中的局部排序:使用 vector 实现
132 篇文章 ¥59.90 ¥99.00
本文介绍了如何在 C++ 中利用 vector 的 sort() 函数进行局部排序,提供示例代码展示如何对 vector 指定范围内的元素进行排序,强调 sort() 函数会原地修改原始向量。

C++ 中使用 vector 进行局部排序

在 C++ 中,vector 是一个非常有用的容器,它可以存储和管理动态大小的元素序列。通过使用 vector,我们可以轻松地对元素进行排序,无论是整个向量还是其中的一部分。在本文中,我们将探讨如何使用 vector 进行局部排序,并提供相应的源代码示例。

要在 vector 中进行局部排序,我们需要使用 STL(标准模板库)中的 sort() 函数。sort() 函数可对给定范围内的元素进行排序,它接受两个迭代器参数,分别指向要排序的起始位置和结束位置。

下面是一个示例代码,展示了如何在 vector 中进行局部排序:

#include <iostream>
#include <vector>
C++中,使用`sort`对`vector`进行排序有多种方式: - **基本一维`vector`的默认排序**:使用`sort`函数对一维`vector`排序时,若不指定排序规则,默认按升序排列。`sort`函数需要两个迭代器参数,分别指向排序范围的起始和结束位置。示例代码如下: ```cpp #include <iostream> #include <algorithm> #include <vector> int main() { vector<int> vec = {2,6,3,5,4,8,1,0,9,10}; sort(vec.begin(), vec.end()); for(int item: vec) cout << item << " "; return 0; } ``` 该代码将`vector`中的元素按升序排列并输出排序后的结果 [^3]。 - **一维`vector`的自定义排序**:可以定义一个比较函数来实现自定义排序规则。比如,要实现降序排列,可定义一个比较函数,在函数中指定元素比较规则。示例如下: ```cpp #include <iostream> #include <algorithm> #include <vector> bool cmp(const int a, const int b) { return a > b; } int main() { vector<int> vec = {2,6,3,5,4,8,1,0,9,10}; sort(vec.begin(), vec.end(), cmp); for(int item: vec) cout << item << " "; return 0; } ``` 上述代码通过自定义的`cmp`函数,使`vector`元素按降序排列 [^3]。 - **`vector<vector<int>>`类型的排序**:当对`vector<vector<int>>`类型的元素排序时,若不指定排序函数,默认按字典序排序。即先比较两个`vector<int>`元素的第一个元素,若相等则比较第二个元素,依此类推,直到找到不相等元素 [^2]。 - **自定义复杂类型的`vector`排序**:对于复杂类型(如`vector<string>`),可以通过自定义排序函数来实现特定规则排序。例如按字符串中特定子串转换后的整数值进行升序排列,示例代码如下: ```cpp #include <iostream> #include <algorithm> #include <vector> #include <string> bool sortFun(const string p1, const string p2) { string ss1 = p1.substr(6, 7); int val1 = std::stoi(ss1); string ss2 = p2.substr(6, 7); int val2 = std::stoi(ss2); return val1 < val2; } int main() { vector<string> _Vec; _Vec.push_back("string5"); _Vec.push_back("string2"); _Vec.push_back("string1"); _Vec.push_back("string4"); cout << "排序前: "; for (auto elem : _Vec) cout << elem << " "; sort(_Vec.begin(), _Vec.end(), sortFun); cout << endl << "排序后: "; for (auto elem : _Vec) cout << elem << " "; cout << endl; return 0; } ``` 此代码通过自定义的`sortFun`函数,按字符串特定子串转换后的整数值升序排列`vector<string>` [^4]。 - **`vector`的局部排序**:使用`sort`函数可以对`vector`进行局部排序,只需指定要排序的范围,即传入指向排序起始和结束位置的迭代器。若要保留原始`vector`副本,可先创建一个新的`vector`并复制内容。示例如下: ```cpp #include <iostream> #include <algorithm> #include <vector> int main() { vector<int> vec = {2,6,3,5,4,8,1,0,9,10}; // 对vec的第3个到第6个元素进行排序 sort(vec.begin() + 2, vec.begin() + 6); for(int item: vec) cout << item << " "; return 0; } ``` 该代码对`vector`从第3个元素到第6个元素进行排序并输出结果 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值