我正在尝试为我拥有的二维csv文件创建一个等效的excel VLOOKUP函数。如果给出数字5,我希望能够查看我拥有的动态表的列,并在该列中找到编号小于5的行。
例如。如果我之前用过我的例子中的5:
2 6
3 7
4 11
6 2
9 4
将返回给我11,数据与5以下的最高条目配对。
我不知道该怎么做。如果它有帮助,第一列(我将搜索的列)中的条目将从最小到最大。
我是C ++的初学者,所以如果我错过了一些明显的方法,我会道歉。
答案 0 :(得分: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_bound
或upper_bound
std::cout << data.lower_bound(5)->second; // prints 11
一些注意事项:首先,请注意使用std::greater<T>
作为比较运算符。这是必要的,因为如果您要查找的键不在地图中,lower_bound
通常会将迭代器返回到 next 项(而不是之前的)。使用std::greater<T>
反向排序地图,因此“下一个”项目是较小的项目而不是较大的项目。
其次,请注意,这会根据键自动对数据进行排序,因此它仅取决于您插入的数据,而不是插入的顺序。