1

私が持っている 2 次元の csv ファイルに対して、Excel の VLOOKUP 関数に相当するものを作成しようとしています。数値 5 が与えられた場合、私が持っている動的テーブルの列を見て、その列で最大の数値が 5 未満の行を見つけたいと思います。

例えば。前の例から 5 を使用した場合:

2  6
3  7
4  11
6  2
9  4

私には 11 が返されます。これは、5 未満の最高のエントリとペアになったデータです。

これを行う方法がわかりません。それが役立つ場合は、列 1 (検索する列) のエントリが最小から最大に移動します。

私はC++の初心者なので、明らかな方法が欠けていたら申し訳ありません。

4

1 に答える 1

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次に、 orを使用してデータを検索しますupper_bound

std::cout << data.lower_bound(5)->second; // prints 11

いくつかの注意事項: まず、std::greater<T>比較演算子として を使用していることに注意してください。探しているキーがマップに存在しない場合、通常は (前のアイテムではなく)次のlower_boundアイテムにイテレータを返すため、これが必要です。を使用するとマップが逆にソートされるため、「次の」アイテムは大きいものではなく小さいものになります。std::greater<T>

次に、これはキーに基づいてデータを自動的にソートするため、挿入の順序ではなく、挿入するデータのみに依存することに注意してください。

于 2013-08-04T17:22:23.530 に答える