我正在尝试为我有的二维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