1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include <windows.h>
#include <map>
#include <vector>
#include <algorithm>
...
int tableauDeMerdeEnEntre[10][10]={
{1,0,1,0,1,1,0,1,1,1},
{1,0,0,1,1,1,1,0,1,0},
{0,1,1,0,0,0,0,0,0,1},
{1,0,0,0,1,1,0,1,0,1},
{1,1,1,1,0,0,0,0,1,1},
{1,1,0,0,0,1,0,1,1,0},
{1,1,0,0,0,0,0,0,1,1},
{0,1,1,0,0,0,0,0,0,1},
{1,1,0,0,0,0,0,0,1,1},
{1,0,1,0,1,1,0,1,1,1}
};
std::multimap<int,int> mymap;
for(int i = 0 ; i<10 ;i++)
{
int key = 0;
for(int j = 0 ; j<10 ;j++)
{
key += tableauDeMerdeEnEntre[i][j] << j;
}
mymap.insert(std::pair<int,int>(key,i));
}
std::vector<std::vector<int>> myvector;
int maxCardinalite = 0;
int nbCategorie = 0;
for( auto iter = mymap.begin() ; iter != mymap.end() ; iter = mymap.upper_bound(iter->first) )
{
std::vector<int> mylist;
for(auto iter2 = iter ; iter2 != mymap.upper_bound(iter->first) ; ++iter2)
{
mylist.push_back(iter2->second);
maxCardinalite = (maxCardinalite > mylist.size()) ? maxCardinalite : mylist.size();
}
myvector.push_back(mylist);
nbCategorie++;
}
int* tableauDeMerdeEnSortie = (int*)malloc(maxCardinalite*nbCategorie*sizeof(int));
ZeroMemory(tableauDeMerdeEnSortie,maxCardinalite*nbCategorie*sizeof(int));
std::sort(begin(myvector),end(myvector),[](std::vector<int> a, std::vector<int> b){return a[0]<b[0];});
int ligne = 0;
for( auto& const i : myvector )
{
int colone = 0;
for( auto j : i)
{
tableauDeMerdeEnSortie[ligne*maxCardinalite+colone] = j;
colone++;
}
ligne++;
} |
Partager