-4

double 型のマップ コンテナーで int を検索する方法があるかどうかを知りたかったのです。たとえば、次の例では

std::map<double,double> mt;
mt[2.33] =3.45;

if(mt.find(2)!=mt.end()) //How to do a search for an int instead of a map
{
    //Found
}

double の代わりに int を検索するようにマップに指示する方法があるかどうかを知りたかったのです。マップはデフォルトで double を検索するためです。

4

3 に答える 3

2

これを行う 1 つの方法は、lower_bound/upper_boundメンバー関数を使用して整数付近の値の範囲を取得し、この範囲を手動で確認することです。

もう 1 つの方法は、キーを整数として比較するカスタム コンパレータを使用してマップを使用することです ( std::map referenceを参照)。これにより、初期キー値を保持し、整数を検索できます。しかし、その場合、double を検索することはできません。

とにかく、このタスクは少し奇妙です。おそらく、問題に対するデータ構造の選択を再考する必要があります。

于 2013-08-09T08:37:16.770 に答える
1

積分部分 (またはそのためにラムダを使用できるため、他の何か) のみに関心がある場合は、次を使用できます。

auto result = find_if(begin(mt), end(mt), 
                      [&](pair<double, double> p){return (int)(p.first) == 2)}
                     )
if (result != mt.end())
{
    // do your stuff
}

この種のアプローチのユースケースはまだ不明のままです...

于 2013-08-09T09:22:01.467 に答える
1

以下が機能するはずです。

 it = mt.lower_bound(2);

ただし、後でアイテムを確認する必要があります。

 it->first<3;

正しい結果を得るには、true を返す必要があります。

于 2013-08-09T08:38:00.897 に答える