我有一个函数,它在循环内部调用,它可以为每个循环生成一组整数,例如:
循环1的结果:{1 1 1 2}
循环2的结果:{1 1 1 3}
循环3的结果:{2 1 1 3}
循环4的结果:{3 1 3 2}
并且该函数可以生成重复结果,例如,结果2和结果3是相同的。我需要把这些结果放在一个数据结构中,但是不能把重复,如果结果2与结果3相同,只保留其中一个,如何在C
中实现它?
答案 0 :(得分:1)
如果项目范围足够小,您可以使用位图作为枚举的平均值。例如。如果要表示1到32范围内的整数集,则只需要一个用作位图的32位整数:
00000001 00000001 00000000 00000000 - for set {8,16}
^ ^
8 16
等
如果范围较大,请使用字节数组,其中每个位表示此位置的值是否存在于集合中:
#define MAXVAL 1024
typedef unsigned char bitmap_t[];
byte bitmap[1 + MAXVAL / CHAR_BIT] = { 0 };
// CHAR_BIT is defined in limit.h and is equal to count of bits in a byte
void insert(bitmap_t bitmap, unsigned val) {
assert(val < MAXVAL);
bitmap[val / CHAR_BIT] |= (1 << (val % CHAR_BIT);
}
int is_present(bitmap_t bitmap, unsigned val) {
assert(val < MAXVAL);
return bitmap[ val / CHAR_BIT ] & (1 << (val % CHAR_BIT));
}
答案 1 :(得分:0)
在C ++中,这很容易。只需使用std::set
std::tuple
。在C中,您必须自己实现所有功能或找到一个好的库,但整体方法是相同的。