이글은 예전 제 싸이월드 블로그에 작성한 글을 티스토리로 옮긴 것입니다.
원문 : 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 ;
}
|
'삽질미학 > C,C++' 카테고리의 다른 글
파일의 값을 이용한 bisection search (0) | 2017.01.09 |
---|---|
printf() 에서 "%nd" 에서 n값을 변수로 대체하기. (0) | 2017.01.09 |
STL set 컨테이너에 구조체 삽입하기 (0) | 2017.01.09 |
Unblock me 게임 풀어주는 코드 (0) | 2017.01.09 |
[Linux C/C++] 실행파일 생성시간을 이용한 버전관리 (0) | 2016.10.24 |