c#发展

注册

 

发新话题 回复该主题

玩转C容器中的查找功能自定义对象 [复制链接]

1#
C++标准中std提供了几种容器,它们包括顺序容器,比如vector,list,deque,queue,stack等,关联容器,比如map,set等,其中使用频率比较高的容器是vecotor向量容器、map键值对容器,我们经常会使用这两个容器来存储数据,然后根据不同的场景来查找获取容器内的值。而本文接下来将说明从这两类容器中快速查找获取数据的方法。一、vector容器查找功能vector容器自身没有提供查找函数,这里借助标准模版库algorithm提供的find,使用的时候需要包含该头文件。首先定义vector容器变量,然后存入数据,接着遍历打印容器内的所有数据,最后调用algorithm提供的函数find从vector向量中查找数据,algorithm提供的函数find需要输入三个入参数,第一个参数是容器开始查找的迭代器变量,第二个变量是容器结束查找的迭代器变量,第三个参数是需要查找的数据。运行程序,输出的内容如下图所示,容器内存在需要查找的数据,返回迭代器变量,我们根据迭代器变量输出数据内容二、map容器查找功能map容器自身提供了查找功能,同时它也支持使用标准模版库algorithm提供的find函数。首先定义map容器变量,写入数据,再遍历输出容器内的数据,接着调用map容器自身提供的find函数来查找key为2的数据,返回迭代器变量,然后根据这个迭代器变量输出键值,接下来调用algorithm提供的find函数,需要注意的是第三个参数输入的是迭代器的取值,最后也是返回迭代器变量。运行程序,输出的内容如下图所示三、键自定义的map容器查找功能map容器使用过程中,有时候为了程序的可维护性以及降低代码的复杂度,需要自定义类作为map的键,在这种场景下,上面的查找方法是否也能够生效呢?接下来让我们进行验证。首先自定义类JKeyPair来作为map的key,如果自定义对象要作为map的键,那么需要重载operator运算符,而如果要使用algorithm中的find,需要重载operator==运算符验证调用map自身提供的find函数,其测试代码如下图所示从运行的结果看,使用自定义对象作为key值,map容器提供的find函数能够正确运行,并且从实际操作过程中,可以得出,map容器提供的find函数,自定义对象不需要重载operator==运算符。接着再验证algorithm中的find,从实际操作过程中,自定义对象需要重载operator==运算符,测试代码段如下图所示,其中find中第三个参数是上一步骤中调用map自身的find返回的迭代器变量运行后打印的结果信息看,能够正确调用algorithm中的find来查找map中的数据四、总结到这里,我们已经将容器vector,map的查找功能介绍完成。接下来梳理总结。vector容器自身没有提供查找函数,因此,需要调用algorithm中的find来快速查找数据。map容器自身既提供了查找函数,也支持使用algorithm中的find来快速查找数据。而自定义对象作为map容器的键的情况下,如果需要支持上面的场景,那么自定义类需要重载operator和operator==运算符。
分享 转发
TOP
发新话题 回复该主题