VLOOKUP函数的C++等价物
C++ Equivalent of VLOOKUP function
我正试图为我拥有的二维csv文件创建一个等效的excel VLOOKUP函数。如果给定一个数字5,我希望能够查看我所拥有的动态表的一列,并找到该列中最高数字小于5的行。
例如。如果我使用了前面例子中的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>
作为比较运算符。这是必要的,因为如果您要查找的键不在映射中,lower_bound
通常会向下一个项(而不是上一个)返回迭代器。使用std::greater<T>
对映射进行反向排序,因此"下一个"项是较小的项,而不是较大的项。
其次,请注意,这会根据关键字自动对数据进行排序,因此它只取决于插入的数据,而不是插入的顺序。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- python集合的C++等价物是什么.计数器
- C++中是否存在 std::conditional 的懒惰等价物?
- std::endl,在 Python 中是否有等价物?(返回 + 刷新)
- 在本征C++中 MKL 的函数"zgges"等价物是多少?
- 在C++中使用std或boost库的Qtimer等价物是什么
- GLM中的Java Matrix4.transform等价物
- 对于std::bitset,是否有一个ffs()等价物
- std::move() 或其在局部变量上的显式等价物可以允许 elision 吗?
- 这个 matlab 代码的C++等价物是什么(fread matlab vs fread C/C++)?
- 对于wchar_t,字符(0)或'