Ce sera quelque chose comme ça (Ne pas avoir été le codage en C pour longtemps, et le code n'a pas été testé):
#include<stdlib.h>
#include<stdio.h>
typedef struct {
int value1;
int value2;
} values_t;
values_t* values;
size_t values_size = 100;
values_t* values_unique;
size_t values_unique_size;
int valcmp(const values_t* a, const values_t* b)
{
//a < b -> -1
//a == b -> 0
//a > b -> 1
return (a->value1 == b->value1) ? ((a->value2 == b->value2) ? 0 : ((a->value2 < b->value2) ? -1 : 1)) : ((a->value1 < b->value1) ? -1 : 1);
}
int main(void)
{
values = malloc(values_size * sizeof(values_t));
values_unique = malloc(values_size * sizeof(values_t));
//fill the values table
memcpy(values_unique, values, values_size * sizeof(values_t));
qsort(values_unique, values_size, sizeof(values_t), valcmp);
int i;
//hopefully values_size > 0
for(i = 1, values_unique_size = 1; i < values_size; ++i)
if(valcmp(&values_unique[i], &values_unique[values_unique_size - 1]) != 0)
values_unique[values_unique_size] = values_unique[i];
}
même en C++:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
vector<pair<int,int> > V, V_unique;
int main()
{
V_unique = V;
sort(V_unique.begin(), V_unique.end());
V_unique.resize(unique(V_unique.begin(), V_unique.end()) - V_unique.begin());
}
'values_t values' n'est pas un tableau. – alternative
'values [i] .value1' serait une erreur de compilation. Pouvez-vous poster le code réel que vous avez? – EboMike
Ouais désolé, supposons qu'ils sont des pointeurs malloced correctement; ci-dessus est juste un pseudo code. –