0

我有一个函数,它在循环内部调用,它可以为每个循环生成一组整数,例如:

循环 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

4

2 回答 2

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));
}
于 2012-11-01T18:52:52.683 回答
0

在 C++ 中,这很容易。只需使用 a std::setof std::tuples。在 C 中,您必须自己实现所有功能或找到一个好的库,但总体方法是相同的。

于 2012-11-01T18:33:58.543 回答