Хороший алгоритм получения парной комбинации элементов
Я пытаюсь написать приложение, которое будет иметь функцию "special_reorder" и является ядром моего приложения. Возможно, это самая сложная функция в моем приложении. Эта функция является членом класса, аналогичного std::map, однако она не сортирует автоматически содержащиеся элементы. После вызова функции такой объект класса должен быть воссоздан так, чтобы элементы карты были расположены в следующем порядке. Единственное, что я хочу сделать, - это чтобы каждый следующий вызов функции отличался последовательностью следующих уникальных элементов от всех предыдущих элементов в этом объекте до тех пор, пока функция не будет вызвана n раз, где n - это число всех различных комбинаций. Я слаб в математике, но я знаю, что число перестановок х! = n, где x - количество элементов на карте. Я хочу, чтобы эта функция была не такой медленной. Я думаю, что ключи должны в основном использоваться для переупорядочения, потому что они имеют тип short в экземпляре класса в моем приложении.
Вот код класса:
#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
Пожалуйста, помогите мне реализовать эту функцию или дайте мне хорошее представление о том, как это сделать.
1 ответ
Так как вы используете C++ рассмотреть
станд::next_permutation
как решение вашей проблемы.