2013-08-04 2 views
1

저는 2 차원 CSV 파일에 대해 VLOOKUP 함수를 생성하려고합니다. 숫자 5가 주어지면 내가 가지고있는 동적 테이블의 열을보고 해당 열에서 5보다 작은 숫자를 가진 행을 찾을 수 있기를 원합니다.C++ VLOOKUP 함수와 동일합니다.

예를 들면. 내가 전에 내 예에서 5를 사용하는 경우 나 11로 돌아가시겠습니까

2 6 
3 7 
4 11 
6 2 
9 4 

, 데이터는 내가이 일에 대해 이동하는 방법을 몰라 5.

아래 가장 높은 항목과 쌍. 도움이된다면 1 열 (검색 할 열)의 항목이 가장 작은 항목에서 가장 큰 항목으로 이동합니다.

저는 초급부터 C++입니다. 그래서 확실한 몇 가지 방법이 없으면 사과드립니다.

+0

이 데이터 구조는 무엇입니까? 그런 두 정수를보고 있다면'std :: map '이 적당 할 것이다. 그게 네가 가진거야? 아니면'int'의 2-D 배열을 가지고 있습니까? – DUman

+0

두 개의 정수입니다. 도움을 주셔서 감사합니다! – raoul

+0

좋아요, 그것은 두 개의 정수입니다,하지만 당신은 그것을 무엇에 저장하고 있습니까? 그것은'std :: map'인가 아닌가? 아직 그 코드를 작성 했습니까? – DUman

답변

1

std::map은 아주 쉽게이 작업을 수행 할 수 있습니다

는 당신은 당신의 데이터로 채우기 다음, 올바른 유형의지도를 작성하여 시작 했죠

: 그럼

std::map<int, int, std::greater<int> > data; 

data[2] = 6; 
data[3] = 7; 
data[4] = 11; 
data[6] = 2; 
data[9] = 4; 

당신과 함께 데이터를 검색 것 lower_bound 또는 upper_bound : 노트의 몇

std::cout << data.lower_bound(5)->second; // prints 11 

: 첫째, comparis로 std::greater<T>의 사용에주의 on 연산자. 이는 필요한 키가지도에없는 경우 lower_bound이 보통 다음 항목 (이전 대신)으로 반복기를 반환하기 때문에 필요합니다. std::greater<T>을 사용하면지도가 반대로 정렬되므로 "다음"항목은 큰 것이 아니라 작은 항목이됩니다.

둘째,이 방법은 자동으로 키를 기준으로 데이터를 정렬하므로 삽입 순서가 아니라 삽입 한 데이터에만 의존합니다.

+0

내지도의 데이터가 동적이고 더 많은 항목을 추가 할 수 있다면? – raoul

+0

@ user2570010 :지도는 동적 추가/삭제를 처리하도록 설계되었으므로 더 추가하려는 경우 문제가되지 않습니다. –