2017-10-31 2 views
0

データへのポインタにマップするためのさまざまなint値があるとします。我々はそれらがあまりにも疎ではないことを知っているので、map<>がほしいと思っており、vector<>の高速検索が好きです。連続していない配列よりもサイズが小さいC++のベクトルサイズを変更しますか?

(ないSTLとはいえ、およびC++)私はベテランのC男だが、コードが同じくらい冗長なものであることを右のようではありません。また、

if (i>= vec.size()) 
    vec.resize(i+1); 

if (!vec[i]) 
    vec[i] = pmydata; 

、最小冗長を持っていますこれを行う方法は、さまざまなC++版で変更されましたか?

+3

「そう思わない?」それはどういう意味ですか?これはあなたがしたいことをする方法です*。 –

+2

これは冗長ではありません。符号付き/符号なし比較警告を削除するには、おそらく 'i'または' size() 'にキャストが必要です。 –

+2

ベクトルの周りにラッパー/アダプターを使用することができますので、好きなマップ様のインターフェースを提供します。 –

答えて

2

stlはこの種のコンテナのショートカットを提供しません。あなたがそれをエミュレートする方法は正しいものです。

Marc Glisseが述べたように、std :: vectorにアダプタを書き込んで、std :: unordered_mapやstd :: mapと同じインタフェースを提供することができます。

C++にはいくつかの優れたコンテナがありますが、正確なニーズに合わせて手作業で実装する必要があります。

+0

自由な関数を書くことさえできます: void extend(ベクトル&vec、int index、T value) 'です。現在の仕事でやったことをやっておらず、 'operator []'メソッドを置き換える 'std :: vector'クラスから新しいクラスを派生させただけでは、それを理由づけできなくなります。 –

+0

なぜマークしないのですか?どのように間違っていたのですか? –

関連する問題