gpt4 book ai didi

c++ - void指针查找频繁出现的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:47 26 4
gpt4 key购买 nike

在开始为我的项目编写代码之前,我需要征求意见。它是关于查找频繁出现的元素(模式)。元素可以在intchar类/结构的任何对象数组中。所以,我必须使用 void*。我有一个返回模式元素第一次出现的函数。即

int arr[] = { 1, 7, 2, 4, 4, 8, 4 }
mode is 4
> return value 3
char arr[] = { 'q', 'w', 'w', 'u', 'u', 'w', 'o' }
mode is w
> return value 1
myClassObj[4];
myClassObj[0].mySetter(0,4);
myClassObj[1].mySetter(1,1);
myClassObj[2].mySetter(1,1);
myClassObj[3].mySetter(7,9);
> return value 1

我应该对任何类型的数组进行排序以查找模式吗?我应该使用 map 库吗?我应该做什么,我该如何开始?

int indexOfFirstMode (const void * base, int num_of_elements, int size_of_arr, 
bool (*checker) (const void *, const void *));

编辑:

我现在不应该使用模板

最佳答案

我想,您可以使用模板技术代替 void*。这使得解决方案更容易:

#include <iostream>

using namespace std;


template <class T>
int indexOfFirstMode(T array[], int size, bool (*checker)(const T& a, const T& b))
{
int index = -1;
int max_num = 0;

for (int i = 0; i < size; i++)
{
int value = array[i];
int num = 1;

for (int j = i + 1; j < size; j++)
if (array[j] == value)
num += 1;

if (num > max_num)
{
index = i;
max_num = num;
}
}

return index;
}


bool checker(const int& a, const int& b)
{
return a == b;
}


int main()
{
int A[9] = {15, 3, 5, 7, 3, 1, 5, 5, 5};

cout << indexOfFirstMode(A, 9, checker) << endl; // 2

return 0;
}

关于c++ - void指针查找频繁出现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33197847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com