c++ 找出序列中出现得最频繁的值

本文介绍如何使用C++编写一个函数模板,该模板接受迭代器并找出序列中出现频率最高的元素。当前实现仅返回首次出现频率最高的值,未处理相同频率的多个值情况。
摘要由CSDN通过智能技术生成

题目要求:编写一个函数模板,接受表示未知类型迭代器的一对值,找出在序列中出现的最频繁的值。

自己写的代码没有考虑存在出现次数最多且相同的情况,也就是默认输出第一次最多的数值。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//找到容器中出现次数最多的值
template <typename T>
typename T::value_type find(T first, T last) {
    //将容器中的元素复制到一个vector
    size_t amount = 0;
    for(T iter = first; iter != last; ++iter) amount++;
    typedef vector<typename T::value_type> VectType;
    VectType vect(amount);
    typename VectType::iterator newFirst = vect.begin();
    typename VectType::iterator newLast = vect.end();
    uninitialized_copy(first, last, newFirst);
    sort(newFirst, newLast);
    //统计出现次数最多的值
    size_t tmp, cnt=0;
    size_t mmax = 0;
    typename VectType::iterator iter = newFirst;
    while(newFirst != newLast) {
        if(*iter != *newFirst) {
            if(cnt > mmax
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值