自定义STL map排序:按照姓名长度排序
需积分: 31 162 浏览量
更新于2024-09-12
收藏 48KB DOCX 举报
"这篇文档主要讨论了如何在STL(标准模板库)中自定义排序准则,特别是针对set和map容器。通过创建自定义结构体并重载`<`运算符,可以改变元素的默认排序方式。文中给出了一个示例,展示了如何根据学生对象的不同属性(如学号、身高或姓名)进行排序。"
在STL中,`set`和`map`容器会根据元素的键值自动进行排序。通常,它们使用`<`运算符来比较元素,决定排序顺序。但是,如果默认的排序方式不能满足需求,我们可以自定义排序准则。这里提供了三种方法来修改`map`的排序准则:
**方法1:采用结构体方法修改map的准则**
首先,我们创建一个名为`stu`的结构体,包含三个成员变量:`num`(学号)、`height`(身高)和`name`(姓名)。为了实现自定义排序,我们需要重载结构体的`<`运算符。
例如,如果我们要按照学号`num`进行排序,我们可以这样重载`<`运算符:
```cpp
bool operator<(const stu& src) const {
return this->num < src.num;
}
```
若要按身高`height`排序,重载如下:
```cpp
bool operator<(const stu& src) const {
return this->height < src.height;
}
```
而如果要按照姓名的长度进行排序,我们可以这样做:
```cpp
bool operator<(const stu& src) const {
return (this->name).size() < (src.name).size();
}
```
如果需要按照姓名的字典顺序排序,重载如下:
```cpp
bool operator<(const stu& src) const {
return this->name < src.name;
}
```
接下来,我们可以创建一个`map<stu, int>`类型的实例,并插入一些`stu`对象。通过迭代遍历`map`,可以看到元素已经按照我们指定的排序准则排列。
```cpp
map<stu, int> stumap;
// 插入元素
stumap.insert(make_pair(kk1, 20));
stumap.insert(pair<stu, int>(kk2, 21));
stumap.insert(make_pair(kk3, 22));
// 遍历并打印map,展示排序结果
for (pos = stumap.begin(); pos != stumap.end(); ++pos) {
cout << "Name: " << pos->first.name << ", Height: " << pos->first.height << ", Num: " << pos->first.num << endl;
}
```
以上就是如何在STL中修改`map`的排序准则的方法。通过这种方式,我们可以根据实际需求灵活地调整元素的排序规则,不仅限于数值或字符串的比较,还可以扩展到更复杂的自定义类型。这种方法对于STL编程来说非常实用,特别是在处理自定义数据结构时。
2014-11-25 上传
2008-11-13 上传
2011-04-26 上传
2023-09-01 上传
2023-06-01 上传
2023-10-20 上传
2024-10-27 上传
2024-01-10 上传
2023-10-15 上传
myl132799
- 粉丝: 1
- 资源: 45
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析