만해 님이 쓰신 글 :
: 안녕하세요 만해입니다.
: Url_Id Duration_Time Duration_Count
: 1.0 1.0 2
: 1.0 10.0 1
: 1.0 17.0 1
: 1.0 343.0 1
: 2.0 17.0 2
: 2.0 51.0 1
: 2.0 59.0 1
: 3.0 0.0 40
: 3.0 1.0 105
: ...
: DataBase에 이런 형태로 자료가 저장 되어 있고요
Url_Id 가 위에는 실수 형태로 표기 되어 있는데,
물론 실제로는 정수겠지요?
: 이런 자료를 vector로 받아 들여서 처리 할려고 하느데요
DB에 있는 데이터를 처리하는 데,
굳이 메모리에 전부 로딩해서 다룰 필요가 있을까요?
적당한 SQL 쿼리 문와 DB 액세스용 API를 잘 이용해서 처리하는 것이 좋습니다.
C++빌더의 DB 컴포넌트와 API는 정말 편리합니다.
: Uri_Id 하나당 여러개의 자료가 존재 하는 형태인데요
:
: 이걸 어떻게 정의 해야 하는지 감이 안 잡히네요
:
: 예를 들면
:
: Vector<int> D1; -> 1차원
: Vector< Vector<int> > D2; -> 2차원 배열
: Vector< Vector< Vector < int > > > D3; -> 3차원 배열
:
: 이렇게 되는데
:
: 제가 원하는 형태는 1차원 배열의 한 자료값이 2차원 배열 형태로 된거라서
:
: -> Url_Id[1][0].Duration_Time = 1.0
: Url_Id[1][0].Duration_Count = 2
: Url_Id[1][1].Duration_Time = 10.0
: Url_Id[1][1].Duration_Count = 1
:
: 이런식으로 조합 가능한 자료형을 어떻게 정의 해야 하는지
:
: 고수님들의 조언 부탁 드립니다.
굳이 메모리에 로드해야 해서 처리해야 한다면 다음과 같이 해보세요.
Url_Id가 중복해서 존재하고, 이 값 자체는 변하지 않는 경우라면,
multimap이나 hash_multimap을 쓰면 됩니다. (속도는 후자가 빠릅니다.)
multimap이 map과 다른 점은 키값이 중복될 수 있다는 점입니다.
(그래서 operator[]를 지원하지 않죠.)
다음과 같은 구조체(클래스)를 정의하신 후,
struct url_duration {
float duration_time;
int duration_count;
url_duration(float time, int count) : duration_time(time), duration_count(count) {};
};
multimap을 정의합니다.
typedef multimap<url_duration> url_duration_mmap;
url_duration_mmap mm_urls;
데이터를 삽입할 때는 다음과 같이 하면 됩니다.
mm_urls.insert(url_duration_mmap::value_type(1, url_duration(1.0, 2)));
mm_urls.insert(url_duration_mmap::value_type(1, url_duration(10.0, 1)));
....
데이터를 검색하려면 equal_range 등의 멤버함수를 쓰면 됩니다.
(
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=25 참고 )