gpt4 book ai didi

c++ - 一种获得元素休闲组合的好算法

转载 作者:行者123 更新时间:2023-11-28 06:41:48 26 4
gpt4 key购买 nike

我尝试编写一个应用程序,该应用程序将具有名为“special_reorder”的函数,并且是我应用程序的核心。也许这是我的应用程序中最复杂的功能。此函数是类似于 std::map 的类的类成员,但它不会自动对包含的元素进行排序。在函数调用之后,应该按照将 map 元素放入下一个不同顺序的方式重新创建此类对象。我想要完成的事情是,每个下一个函数调用都应该使下一个唯一元素的序列与之前出现在该对象中的任何元素序列不同,直到该函数被调用 n 次,其中 n 是所有不同组合的数量。我数学不好,但我知道排列数是 x! = n 其中 x 是 map 中的元素数量。我希望这个功能不要那么慢。我认为键应该主要用于重新排序,因为它们在我的应用程序的类实例中属于短类型。

这是一个类代码:

#ifndef MY_MAP_H
#define MY_MAP_H

template<typename A, typename B>
class my_map
{
private:
int count, len ;
A *keys ;
B *values ;

void resizeContent()
{
A *new_k = new A[len * 2] ;
B *new_val = new B[len * 2] ;
for(int aa = 0; aa < len; aa++)
{
new_k[aa] = keys[aa] ;
new_val[aa] = values[aa] ;
delete[] keys ;
delete[] values ;
keys = new_k ;
values = new_val ;
len *= 2 ;
}
}

public:
my_map()
{
count = 0 ;
len = 10 ;
keys = new A[len] ;
values = new B[len] ;
}
~my_map()
{
delete[] keys ;
delete[] values ;
}

void special_reorder()
{

}

int size()
{
return count ;
}

void replace(int first, int second)
{
if(first >= count || second >= count || first < 0 || second < 0)
return ;
A k_tmp = keys[first] ;
B v_tmp = values[first] ;
keys[first] = keys[second] ;
values[first] = values[second] ;
keys[second] = k_tmp ;
values[second] = v_tmp ;
}

void insert(A key, B val)
{
if(count == len)
resizeContent() ;
keys[count] = key ;
values[count++] = val ;
}

B& operator[] (const int index)
{
return values[index] ;
}
} ;

#endif

请帮助我实现该功能或给我一些关于如何执行此操作的好主意。

最佳答案

由于您使用的是 C++,请考虑

std::next_permutation

作为您问题的解决方案。

关于c++ - 一种获得元素休闲组合的好算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835951/

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