2013-08-04 103 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:地图设计用于处理动态添加/删除,因此如果您想添加更多,这不是问题。 –