이글은 예전 제 싸이월드 블로그에 작성한 글을 티스토리로 옮긴 것입니다.
원문 : http://cy.cyworld.com/home/21147242/post/52DE09ED7395739A07C68401
원문 작성일 : 2014.1.21

============================================================

STL set 컨테이너에 2차원 배열 삽입하기.
set 항목으로 2차원 배열을 넣어보려 했으나 일단 안되는 것 같다. (아래 링크 참조)
http://kuaaan.tistory.com/167 : ( STL의 원소로 배열(Array)을 사용할 수 없는 이유 )
결국 배열을 구조체 변수로 선언함.
배열의 크기를 설정하기 위해 구조체에 static 변수를 두개 선언함.
memcmp() 로 깔끔이 되는 듯 했으나 배열값이 음수일 때
음수값이 더 크다고 판단하므로 memcmp() 를 쓰면 안되었다.
싸이월드 블로그에 코드 깔끔히 올리는 방법 없나... 찾아봐야겠다.

 

 

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#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 ;
 
}
 

+ Recent posts