如何在结构体数组中删掉重复值

假如结构体数组中的数据为:3 3 5 5 5 3 7 0 2 5 ,删除后的结构体数组中的数据为:3 5 3 7 0 2 5

用个土方法吧,先吧结构体的数据截取出来,放在数组里遍历。在截取该数组的足后一个对象来遍历比较是否有相同的,有就删除,没有就吧该对象存放在新的数组中。

如果你的数据最大小于数组的长度则可以这样实现。
思想: 根据拆装箱思想,先统计各个数据重复个数,再删除重复数据

#include
#include

using namespace std;

int main(){

int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);

int *p = new int[n];

//3,3
memset(p, 0, n * sizeof(int));
for (int i = 0; i < n; i++){
    p [a[i]] ++;
    cout << p[i] << ",";
}

int count = 0;
for (int k = 0; k < n; k++)
{
    if (p[k] >= 1){
        a[count++] = k;
    }
}

cout << "删除后的数组" << endl;

cout << "长度: " << count << endl;
cout << "数据: ";
for (int k = 0; k < count; k++)
{
    cout << a[k] << ", ";
}
delete p;
getchar();
return 0;

}

如果不满足第一种方法,则用下面这种,时间复杂度取决于快排
思想:先排序,后挑选不重复的数据
#include
#include

using namespace std;

int cmp(const void a, const void *b){
return(
(int *)a - *(int *)b);
}

void show(int a[], int n){
for(int i = 0; i < n; i++) {
cout << a[i] << ",";
}
}

int main(){

//fun1();

int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);
int *p = new int[n];

qsort(a, n, sizeof(a[0]),cmp);

//show(a, n);

int count = 0;
for(int i = 0; i < n; i++) {
    if( a[i] == a[i + 1]) {
        continue;
    }
    p[count++]= a[i];
}

show(p, count);
getchar();
return 0;

}

0
如果你的数据最大小于数组的长度则可以这样实现。
思想: 根据拆装箱思想,先统计各个数据重复个数,再删除重复数据
#include
#include
using namespace std;
int main(){
int a[] = {3, 3, 5, 5, 5 ,3 ,7, 0 ,2, 5 };
int n = sizeof(a) / sizeof(int);

int *p = new int[n];

//3,3
memset(p, 0, n * sizeof(int));
for (int i = 0; i < n; i++){
p [a[i]] ++;
cout << p[i] << ",";
}

int count = 0;
for (int k = 0; k < n; k++)
{
if (p[k] >= 1){
a[count++] = k;
}
}