7

まず、セットを持っています

std::set<int*> my_set;

p次に、特定の int ポインターが に存在するかどうかを確認する関数があります。これは、ポインターが存在する場合my_setは返すだけで、そうでない場合は何もしません。truefalse

関数は参照される を変更しないのでint、ポインターを として受け取るのが自然const int*です。つまり、

bool exists_in_my_set(const int* p)
{
    return my_set.find(p) != my_set.end();
}

ただし、コードをコンパイルしようとすると、次のエラーが発生します。

error: invalid conversion from 'const int*' to 'std::set<int*>::key_type {aka int*}' [-fpermissive]

const int*つまり、コンパイラは、 を呼び出したint*ときに をにキャストしようとしますfind

とにかく、私の質問は次のとおりです。の既存の定義を使用して、を見つける、または少なくとも に存在するかどうかを調べるにはどうすればよいですか?pmy_setpmy_setpmy_set

4

2 に答える 2

1

このようにセットを宣言できます

std::set<const int*> my_set;

...セットからポインタを取得して変更する必要がない場合intこれは、セット内の int のライフタイム* と値が別の場所で管理されており、セットが特定の int/オブジェクトの存在を既に認識しているかどうかを確認する方法にすぎない場合に当てはまります。

(*実際には削除できますがconst int*。)

于 2013-11-11T10:59:44.613 に答える