自定义STL map排序:按照姓名长度排序
需积分: 31 106 浏览量
更新于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 上传
2007-04-25 上传
2007-11-11 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
myl132799
- 粉丝: 1
- 资源: 45
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查