STL中比较自定义类/结构体(map)

简介:

 按年龄比较Person的大小,直接上代码。

方式一(适用于自定义类型):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
#include <map>
using  namespace  std;
struct  Person
{
     Person(string name,  int  age)
     {
         this ->name = name;
         this ->age = age;
     }
     string name;
     int  age;
     bool  operator < ( const  Person &p1)  const
     {
         return  this ->age < p1.age;
     }
};
int  main()
{
     map<Person, string> mm = {
             {Person( "Alice" , 34),  "girl" },
             {Person( "Tom" , 23),  "boy" },
             {Person( "Joey" , 45),  "boy" }
         };
     for  ( const  auto  &p : mm)
     {
         cout << p.first.name <<  " * "  << p.first.age <<  " * "  << p.second << endl;
     }
     return  0;
}

方式二(适用于不可控的类型):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
#include <map>
using  namespace  std;
struct  Person
{
     Person(string name,  int  age)
     {
         this ->name = name;
         this ->age = age;
     }
     string name;
     int  age;
};
struct  ltPerson
{
     bool  operator()( const  Person &p1,  const  Person &p2)  const
     {
         return  p1.age < p2.age;
     }
};
int  main()
{
     map<Person, string, ltPerson> mm = {
             {Person( "Alice" , 34),  "girl" },
             {Person( "Tom" , 23),  "boy" },
             {Person( "Joey" , 45),  "boy" }
         };
     for  ( const  auto  &p : mm)
     {
         cout << p.first.name <<  " * "  << p.first.age <<  " * "  << p.second << endl;
     }
     return  0;
}


运行截图:

151616862.jpg


*** walker ***


本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1324824如需转载请自行联系原作者

RQSLT
相关文章
|
8月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
229 2
|
8月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
446 73
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
存储 Java API
详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
【10月更文挑战第19天】深入剖析Java Map:不仅是高效存储键值对的数据结构,更是展现设计艺术的典范。本文从基本概念、设计艺术和使用技巧三个方面,详细解析HashMap、TreeMap、LinkedHashMap等实现类,帮助您更好地理解和应用Java Map。
243 3
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
JavaScript 前端开发
Vue 系类之 this.tabledatas.map 无效
这篇文章讲述了在Vue项目中使用`this.tabledatas.map`处理接口返回的数组数据时遇到的问题,原因是由于取错了后端返回的数据集合字段值,导致`.map`方法无效,通过检查和修正数据取值解决了问题。
Vue 系类之 this.tabledatas.map 无效
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
JavaScript 前端开发
Vue中传递自定义参数到后端、后端获取数据(使用Map接收参数)
这篇文章讲述了如何在Vue中通过Axios二次封装传递自定义参数到后端,并展示了后端如何使用Map接收这些参数,以及如何避免参数转换错误和统一接口设计的方法。
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。

热门文章

最新文章