2013-08-04 101 views
1

我正在嘗試爲我有的二維csv文件創建excel VLOOKUP函數的等價物。如果給定數字5,我希望能夠查看我擁有的動態表格的列,並找到該列中具有小於5的最高數字的行。C++相當於VLOOKUP函數

例如。如果我用5從我的例子之前:

2 6 
3 7 
4 11 
6 2 
9 4 

會回到我11,低於5

最高的入門配對的數據,我不知道如何去這樣做。如果有幫助,第一列(我將搜索的列)中的條目將從最小到最大。

我是C++的初學者,所以我很抱歉如果我遺漏了一些明顯的方法。

+0

這是什麼數據結構?如果你正在看這樣的兩個整數,那麼'std :: map '應該是合適的。那是你有什麼?或者你有一個「int」的二維數組? – 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_boundupper_bound

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

有兩點要注意:一是注意使用std::greater<T>作爲comparis在運營商。這是必要的,因爲lower_bound通常會將迭代器返回到下一個項目(而不是之前的項目),前提是您要查找的鍵不在地圖中。使用std::greater<T>反向排序地圖,所以「下一個」項是較小的一個,而不是較大的一個。

其次,請注意,這會根據鍵自動排序數據,因此它只取決於您插入的數據,而不取決於插入的順序。

+0

如果我的地圖數據是動態的,並且可以添加更多條目? – raoul

+0

@ user2570010:地圖設計用於處理動態添加/刪除,因此如果您想添加更多,這不是問題。 –