c++自定义vector的排序方法
时间: 2024-10-15 20:02:07 浏览: 25
在 C++ 中,如果你想要自定义 `std::vector` 的排序方法,你可以通过覆盖其提供的 `sort()` 函数,或者实现 `operator<()` 或者 `compare()` 这两个比较运算符。下面是一个简单的例子,我们将创建一个自定义的整数向量,并基于某个自定义规则(例如按绝对值大小)来进行排序:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
// 自定义比较函数,用于按绝对值大小排序
bool absCompare(int a, int b) {
return std::abs(a) < std::abs(b);
}
class CustomVector : public std::vector<int> {
public:
// 覆盖 sort() 函数
void customSort() {
std::sort(std::begin(*this), std::end(*this), absCompare);
}
};
int main() {
CustomVector vec = {5, -3, 10, -1, 8};
vec.customSort();
for (const auto &num : vec) {
std::cout << num << " ";
}
std::cout << "\n"; // 输出:1 -3 5 -1 8
相关问题
c++ vector 自定义排序
你可以使用sort函数对vector进行自定义排序。以下是一个示例代码,假设你要对一个vector<string>进行排序,按照字符串的长度从小到大排序:
```
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
bool compare(const string& a, const string& b) {
return a.length() < b.length();
}
int main() {
vector<string> names = {"John", "Mary", "Alice", "Tom"};
cout << "Before sorting: ";
for(auto& name : names) {
cout << name << " ";
}
cout << endl;
sort(names.begin(), names.end(), compare);
cout << "After sorting: ";
for(auto& name : names) {
cout << name << " ";
}
cout << endl;
return 0;
}
```
在这个例子中,我们定义了一个compare函数,它接受两个字符串参数,比较它们的长度并返回比较结果。然后在主函数中,我们调用sort函数,并传入compare作为自定义的比较函数。这样,sort函数会根据compare函数的返回结果对vector进行排序。最后,我们输出排序后的结果。
所以,通过自定义比较函数,你可以根据自己的需求对vector进行排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [【C++】vector数组排序](https://blog.csdn.net/weixin_46308081/article/details/117195502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
c++ vector自定义排序
c++中的vector类型可以使用sort()函数进行排序。对于内置数据类型(如int、string),可以直接使用sort(vector.begin(), vector.end())进行排序。但是,如果是自定义类型(如Person类),需要通过自定义比较函数来实现排序。
在给vector排序时,可以定义一个自定义的比较函数,该函数接受两个参数,比较这两个参数的大小,并返回一个bool值。比如,在上述代码中,我们定义了一个myCompare函数来比较Person对象的年龄大小:
bool myCompare(Person &v1, Person &v2) {
return v1.m_Age > v2.m_Age;
}
然后,在调用sort函数时,将自定义的比较函数作为第三个参数传入,即sort(v.begin(), v.end(), myCompare)。
下面是一个完整的实例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
class Person {
public:
Person(std::string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
std::string m_Name;
int m_Age;
};
bool myCompare(Person &v1, Person &v2) {
return v1.m_Age > v2.m_Age;
}
void test() {
std::vector<Person> v;
Person p1("刘备", 24);
Person p2("关羽", 28);
Person p3("张飞", 25);
Person p4("赵云", 21);
Person p5("诸葛", 33);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
std::sort(v.begin(), v.end(), myCompare);
for (std::vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
std::cout << "姓名:" << it->m_Name << ",年龄:" << it->m_Age << std::endl;
}
}
int main() {
test();
return 0;
}
```
运行结果如下:
```
姓名:诸葛,年龄:33
姓名:关羽,年龄:28
姓名:张飞,年龄:25
姓名:刘备,年龄:24
姓名:赵云,年龄:21
```
阅读全文