STL,减少数组,c ++

时间:2010-07-16 16:49:27

标签: c++ stl

对于hw赋值,我们要编写一个看起来像这样的reduce例程:

int reduce(long array[], int size) 
//Where array is the array to reduce, and size is the size of the array.

使用STL。我最初的想法是创建一个集合,将所有项目放在集合中进行比较,但后来我意识到我创建的集合将永远不可用,因为函数返回新集合的大小,但不是集合本身使用。所以我不确定如何使用STL来减少阵列。有什么想法吗?感谢。

编辑: 抱歉,reduce只是将数组减少为一个没有重复的排序数组。

E.g. {4, 4, 2, 1} -> {1, 2, 4}

2 个答案:

答案 0 :(得分:8)

使用std :: sort对数组进行排序,然后在其上应用std :: unique以删除重复项。 std :: unique仅适用于已排序的数组。这里只是简化问题的方法是如何获得原生数组的beginend

long* begin = array;
long* end   = array + size;

一旦掌握了这两项内容,就可以轻松应用标准算法。此外,如果您需要返回新的大小(数组中使用的元素):

long* end_after_unique = unique(...);
return end_after_unique - array;

答案 1 :(得分:0)

std :: map只允许单个条目,并会自动为您排序。您的案例中的“第二”值是无关紧要的。

std::map<INT32,INT32> mymap;
mymap[i] = array[i];//inserts if not already present