#include <cstdio>
#include <set>
using namespace std ;
#define ARRAY_ROW 2
#define ARRAY_COL 3
typedef int (Array)[ARRAY_ROW][ARRAY_COL] ;
struct Data
{
static int row ;
static int col ;
Array array ;
};
int Data::row = ARRAY_ROW ;
int Data::col = ARRAY_COL ;
struct DataCompare
{
bool operator() ( const Data& lhs, const Data& rhs) const
{
// Don't use memcmp(). It cannot compare between negative number.
// int ret = memcmp(&lhs.array,&rhs.array, sizeof(lhs.array)) ;
for ( int ii = 0; ii < lhs.row; ii++ )
{
for ( int jj = 0; jj < lhs.col; jj++ )
{
if(lhs.array[ii][jj] < rhs.array[ii][jj])
return 1 ;
else if (lhs.array[ii][jj] > rhs.array[ii][jj] )
return 0 ;
}
}
return 0 ;
}
};
int main()
{
set<Data, DataCompare> setData ;
set<Data, DataCompare> ::const_iterator setDataIter ;
Data data1 = {{{8,7,0}, {8,1,3}}};
setData.insert(data1) ;
Data data2 = {{{2,3,4}, {4,5,7}}};
setData.insert(data2) ;
Data data3 = {{{2,3,4} , {4,5,6}}} ;
setData.insert(data3) ;
Data data4 = {{{ -1,3,4} , {4, -1,6}}} ;
setData.insert(data4) ;
Data data5 = {{{2,3,4} , {4,5,6}}} ;
setData.insert(data5) ;
Data data6 = {{{ -1,3,4} , {4,1,6}}} ;
setData.insert(data6) ;
setDataIter = setData.begin() ;
for ( ; setDataIter != setData.end() ; setDataIter++ )
{
printf( "================\n" ) ;
for ( int ii = 0; ii < 2; ii++ )
{
for ( int jj = 0; jj < 3; jj++ )
printf( "%d " , setDataIter->array[ii][jj] ) ;
printf( "\n" ) ;
}
}
Data data7 = {{{ -1,3,4} , {4, -1,6}}} ;
setDataIter = setData.find(data7) ;
if (setDataIter != setData.end() )
{
printf( "find~!!\n" ) ;
}
Data data8 = {{{0,0,4} , {4, -1,6}}} ;
setDataIter = setData.find(data8) ;
if (setDataIter == setData.end() )
{
printf( "cannot Find~!!\n" ) ;
}
return 1 ;
}
|