我正在嘗試爲我有的二維csv文件創建excel VLOOKUP函數的等價物。如果給定數字5,我希望能夠查看我擁有的動態表格的列,並找到該列中具有小於5的最高數字的行。C++相當於VLOOKUP函數
例如。如果我用5從我的例子之前:
2 6
3 7
4 11
6 2
9 4
會回到我11,低於5
最高的入門配對的數據,我不知道如何去這樣做。如果有幫助,第一列(我將搜索的列)中的條目將從最小到最大。
我是C++的初學者,所以我很抱歉如果我遺漏了一些明顯的方法。
我正在嘗試爲我有的二維csv文件創建excel VLOOKUP函數的等價物。如果給定數字5,我希望能夠查看我擁有的動態表格的列,並找到該列中具有小於5的最高數字的行。C++相當於VLOOKUP函數
例如。如果我用5從我的例子之前:
2 6
3 7
4 11
6 2
9 4
會回到我11,低於5
最高的入門配對的數據,我不知道如何去這樣做。如果有幫助,第一列(我將搜索的列)中的條目將從最小到最大。
我是C++的初學者,所以我很抱歉如果我遺漏了一些明顯的方法。
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
有兩點要注意:一是注意使用std::greater<T>
作爲comparis在運營商。這是必要的,因爲lower_bound
通常會將迭代器返回到下一個項目(而不是之前的項目),前提是您要查找的鍵不在地圖中。使用std::greater<T>
反向排序地圖,所以「下一個」項是較小的一個,而不是較大的一個。
其次,請注意,這會根據鍵自動排序數據,因此它只取決於您插入的數據,而不取決於插入的順序。
如果我的地圖數據是動態的,並且可以添加更多條目? – raoul
@ user2570010:地圖設計用於處理動態添加/刪除,因此如果您想添加更多,這不是問題。 –
這是什麼數據結構?如果你正在看這樣的兩個整數,那麼'std :: map'應該是合適的。那是你有什麼?或者你有一個「int」的二維數組? –
DUman
這是兩個整數。感謝您的幫助! – raoul
好吧,它是兩個整數,但你將它們存儲在哪裏?它是不是'std :: map'?你寫過那些代碼了嗎? – DUman