1

最初は空であるペアのベクトルがあります。カスタムの挿入および削除メソッドを実装しました。また、特定の要素に NULL を割り当てられるようにしたいのですが、ペアへのポインターではないため、できません。

より具体的に説明しようとすると、ベクトル V が与えられます

std::vector< std::pair<A,B> > V;

ない

    V.assign(number,NULL);

または

    V[n]=NULL;

動作します。

特定のスロットに要素が既に保存されているかどうかを確認するには、これを行う必要があります。回避策はありますか、それともブール値の別のベクトルを作成して、特定のスロットがいっぱいかどうかを保存する必要がありますか?

注: どんな種類のマップでもエレガントに解決できることはわかっていますが、ベクトルでなければなりません。

4

4 に答える 4

2

あなたの場合、マップを使用したソリューションが最適だと思います:

std::map<int, std::pair<A, B> > M;

それからあなたはすることができます

M.erase(M.find(number))

要素を NULL 化します。

于 2013-07-04T19:15:29.440 に答える
1

boost::optional を見ることをお勧めします

boost::optional< std::vector< std::pair<A,B> > > V;
if (V) {
    // V was initialized
} else {
   // wasn't initialized
}

ドキュメントの例: http://www.boost.org/doc/libs/1_54_0/libs/optional/doc/html/boost_optional/examples.html

于 2013-07-04T19:32:48.183 に答える
1

私がそれをしなければならなかった場合、要素のペアがNULLである必要があるかどうか
vector< pair< pair<A,B> ,int > >VV[i].second can be 0 or 1応じて、次のようなことをします.これは、ペアをNULLとマークしたいが、参照用に保持したい場合です.それ以外の場合はmap、Alex1985が言ったように使用します.

于 2013-07-04T19:18:33.043 に答える
0

ペアの 2 番目のタイプとして shared_ptr を使用します。

std::vector< std::pair<A,std::shared_ptr<B> > > V;

V.assign(number, std::shared_ptr<B>());

V[n] = std::shared_ptr<B>();

V[n] = std::shared_ptr<B>(新しい B());

if (V[n].get() == NULL) { /* プロセスはここでは空 */ }

shared_ptr クラスは TR1 で C++ に導入され、C++11 仕様の一部です。標準のコンテナでうまく機能します。

于 2013-07-04T19:19:42.413 に答える